X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fioprio.c;h=66240ed9b6e4afdb9160006bba21e38457514557;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=38b0ca6c87abf95d5cbd0177b67328404afdf512;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/fs/ioprio.c b/fs/ioprio.c index 38b0ca6c8..66240ed9b 100644 --- a/fs/ioprio.c +++ b/fs/ioprio.c @@ -24,30 +24,21 @@ #include #include #include -#include -#include +#include static int set_task_ioprio(struct task_struct *task, int ioprio) { - int err; struct io_context *ioc; if (task->uid != current->euid && task->uid != current->uid && !capable(CAP_SYS_NICE)) return -EPERM; - err = security_task_setioprio(task, ioprio); - if (err) - return err; - task_lock(task); task->ioprio = ioprio; ioc = task->io_context; - /* see wmb() in current_io_context() */ - smp_read_barrier_depends(); - if (ioc && ioc->set_ioprio) ioc->set_ioprio(ioc, ioprio); @@ -115,9 +106,9 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio) continue; ret = set_task_ioprio(p, ioprio); if (ret) - goto free_uid; + break; } while_each_thread(g, p); -free_uid: + if (who) free_uid(user); break; @@ -129,47 +120,11 @@ free_uid: return ret; } -static int get_task_ioprio(struct task_struct *p) -{ - int ret; - - ret = security_task_getioprio(p); - if (ret) - goto out; - ret = p->ioprio; -out: - return ret; -} - -int ioprio_best(unsigned short aprio, unsigned short bprio) -{ - unsigned short aclass = IOPRIO_PRIO_CLASS(aprio); - unsigned short bclass = IOPRIO_PRIO_CLASS(bprio); - - if (!ioprio_valid(aprio)) - return bprio; - if (!ioprio_valid(bprio)) - return aprio; - - if (aclass == IOPRIO_CLASS_NONE) - aclass = IOPRIO_CLASS_BE; - if (bclass == IOPRIO_CLASS_NONE) - bclass = IOPRIO_CLASS_BE; - - if (aclass == bclass) - return min(aprio, bprio); - if (aclass > bclass) - return bprio; - else - return aprio; -} - asmlinkage long sys_ioprio_get(int which, int who) { struct task_struct *g, *p; struct user_struct *user; int ret = -ESRCH; - int tmpio; read_lock_irq(&tasklist_lock); switch (which) { @@ -179,19 +134,16 @@ asmlinkage long sys_ioprio_get(int which, int who) else p = find_task_by_pid(who); if (p) - ret = get_task_ioprio(p); + ret = p->ioprio; break; case IOPRIO_WHO_PGRP: if (!who) who = process_group(current); do_each_task_pid(who, PIDTYPE_PGID, p) { - tmpio = get_task_ioprio(p); - if (tmpio < 0) - continue; if (ret == -ESRCH) - ret = tmpio; + ret = p->ioprio; else - ret = ioprio_best(ret, tmpio); + ret = ioprio_best(ret, p->ioprio); } while_each_task_pid(who, PIDTYPE_PGID, p); break; case IOPRIO_WHO_USER: @@ -206,13 +158,10 @@ asmlinkage long sys_ioprio_get(int which, int who) do_each_thread(g, p) { if (p->uid != user->uid) continue; - tmpio = get_task_ioprio(p); - if (tmpio < 0) - continue; if (ret == -ESRCH) - ret = tmpio; + ret = p->ioprio; else - ret = ioprio_best(ret, tmpio); + ret = ioprio_best(ret, p->ioprio); } while_each_thread(g, p); if (who)