Skip to content

Commit

Permalink
[PATCH] pid: replace do/while_each_task_pid with do/while_each_pid_task
Browse files Browse the repository at this point in the history
There isn't any real advantage to this change except that it allows the old
functions to be removed.  Which is easier on maintenance and puts the code in
a more uniform style.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Eric W. Biederman authored and Linus Torvalds committed Feb 12, 2007
1 parent ab521dc commit 41487c6
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 25 deletions.
18 changes: 12 additions & 6 deletions fs/ioprio.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio)
int data = IOPRIO_PRIO_DATA(ioprio);
struct task_struct *p, *g;
struct user_struct *user;
struct pid *pgrp;
int ret;

switch (class) {
Expand Down Expand Up @@ -98,12 +99,14 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio)
break;
case IOPRIO_WHO_PGRP:
if (!who)
who = process_group(current);
do_each_task_pid(who, PIDTYPE_PGID, p) {
pgrp = task_pgrp(current);
else
pgrp = find_pid(who);
do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
ret = set_task_ioprio(p, ioprio);
if (ret)
break;
} while_each_task_pid(who, PIDTYPE_PGID, p);
} while_each_pid_task(pgrp, PIDTYPE_PGID, p);
break;
case IOPRIO_WHO_USER:
if (!who)
Expand Down Expand Up @@ -167,6 +170,7 @@ asmlinkage long sys_ioprio_get(int which, int who)
{
struct task_struct *g, *p;
struct user_struct *user;
struct pid *pgrp;
int ret = -ESRCH;
int tmpio;

Expand All @@ -182,16 +186,18 @@ asmlinkage long sys_ioprio_get(int which, int who)
break;
case IOPRIO_WHO_PGRP:
if (!who)
who = process_group(current);
do_each_task_pid(who, PIDTYPE_PGID, p) {
pgrp = task_pgrp(current);
else
pgrp = find_pid(who);
do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
tmpio = get_task_ioprio(p);
if (tmpio < 0)
continue;
if (ret == -ESRCH)
ret = tmpio;
else
ret = ioprio_best(ret, tmpio);
} while_each_task_pid(who, PIDTYPE_PGID, p);
} while_each_pid_task(pgrp, PIDTYPE_PGID, p);
break;
case IOPRIO_WHO_USER:
if (!who)
Expand Down
8 changes: 5 additions & 3 deletions kernel/capability.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,15 +92,17 @@ asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr)
* cap_set_pg - set capabilities for all processes in a given process
* group. We call this holding task_capability_lock and tasklist_lock.
*/
static inline int cap_set_pg(int pgrp, kernel_cap_t *effective,
static inline int cap_set_pg(int pgrp_nr, kernel_cap_t *effective,
kernel_cap_t *inheritable,
kernel_cap_t *permitted)
{
struct task_struct *g, *target;
int ret = -EPERM;
int found = 0;
struct pid *pgrp;

do_each_task_pid(pgrp, PIDTYPE_PGID, g) {
pgrp = find_pid(pgrp_nr);
do_each_pid_task(pgrp, PIDTYPE_PGID, g) {
target = g;
while_each_thread(g, target) {
if (!security_capset_check(target, effective,
Expand All @@ -113,7 +115,7 @@ static inline int cap_set_pg(int pgrp, kernel_cap_t *effective,
}
found = 1;
}
} while_each_task_pid(pgrp, PIDTYPE_PGID, g);
} while_each_pid_task(pgrp, PIDTYPE_PGID, g);

if (!found)
ret = 0;
Expand Down
40 changes: 24 additions & 16 deletions kernel/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -596,6 +596,7 @@ asmlinkage long sys_setpriority(int which, int who, int niceval)
struct task_struct *g, *p;
struct user_struct *user;
int error = -EINVAL;
struct pid *pgrp;

if (which > 2 || which < 0)
goto out;
Expand All @@ -610,18 +611,21 @@ asmlinkage long sys_setpriority(int which, int who, int niceval)
read_lock(&tasklist_lock);
switch (which) {
case PRIO_PROCESS:
if (!who)
who = current->pid;
p = find_task_by_pid(who);
if (who)
p = find_task_by_pid(who);
else
p = current;
if (p)
error = set_one_prio(p, niceval, error);
break;
case PRIO_PGRP:
if (!who)
who = process_group(current);
do_each_task_pid(who, PIDTYPE_PGID, p) {
if (who)
pgrp = find_pid(who);
else
pgrp = task_pgrp(current);
do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
error = set_one_prio(p, niceval, error);
} while_each_task_pid(who, PIDTYPE_PGID, p);
} while_each_pid_task(pgrp, PIDTYPE_PGID, p);
break;
case PRIO_USER:
user = current->user;
Expand Down Expand Up @@ -656,30 +660,34 @@ asmlinkage long sys_getpriority(int which, int who)
struct task_struct *g, *p;
struct user_struct *user;
long niceval, retval = -ESRCH;
struct pid *pgrp;

if (which > 2 || which < 0)
return -EINVAL;

read_lock(&tasklist_lock);
switch (which) {
case PRIO_PROCESS:
if (!who)
who = current->pid;
p = find_task_by_pid(who);
if (who)
p = find_task_by_pid(who);
else
p = current;
if (p) {
niceval = 20 - task_nice(p);
if (niceval > retval)
retval = niceval;
}
break;
case PRIO_PGRP:
if (!who)
who = process_group(current);
do_each_task_pid(who, PIDTYPE_PGID, p) {
if (who)
pgrp = find_pid(who);
else
pgrp = task_pgrp(current);
do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
niceval = 20 - task_nice(p);
if (niceval > retval)
retval = niceval;
} while_each_task_pid(who, PIDTYPE_PGID, p);
} while_each_pid_task(pgrp, PIDTYPE_PGID, p);
break;
case PRIO_USER:
user = current->user;
Expand Down Expand Up @@ -1388,7 +1396,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)

if (p->real_parent == group_leader) {
err = -EPERM;
if (process_session(p) != process_session(group_leader))
if (task_session(p) != task_session(group_leader))
goto out;
err = -EACCES;
if (p->did_exec)
Expand All @@ -1407,7 +1415,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
struct task_struct *g =
find_task_by_pid_type(PIDTYPE_PGID, pgid);

if (!g || process_session(g) != process_session(group_leader))
if (!g || task_session(g) != task_session(group_leader))
goto out;
}

Expand Down

0 comments on commit 41487c6

Please sign in to comment.