aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ioprio.c
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-10-19 02:40:14 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-10-19 14:53:40 -0400
commitb488893a390edfe027bae7a46e9af8083e740668 (patch)
treec469a7f99ad01005a73011c029eb5e5d15454559 /fs/ioprio.c
parent3eb07c8c8adb6f0572baba844ba2d9e501654316 (diff)
pid namespaces: changes to show virtual ids to user
This is the largest patch in the set. Make all (I hope) the places where the pid is shown to or get from user operate on the virtual pids. The idea is: - all in-kernel data structures must store either struct pid itself or the pid's global nr, obtained with pid_nr() call; - when seeking the task from kernel code with the stored id one should use find_task_by_pid() call that works with global pids; - when showing pid's numerical value to the user the virtual one should be used, but however when one shows task's pid outside this task's namespace the global one is to be used; - when getting the pid from userspace one need to consider this as the virtual one and use appropriate task/pid-searching functions. [akpm@linux-foundation.org: build fix] [akpm@linux-foundation.org: nuther build fix] [akpm@linux-foundation.org: yet nuther build fix] [akpm@linux-foundation.org: remove unneeded casts] Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Alexey Dobriyan <adobriyan@openvz.org> Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> Cc: Paul Menage <menage@google.com> Cc: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/ioprio.c')
-rw-r--r--fs/ioprio.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/fs/ioprio.c b/fs/ioprio.c
index 10d2c211d18b..0a615f87142e 100644
--- a/fs/ioprio.c
+++ b/fs/ioprio.c
@@ -25,6 +25,7 @@
25#include <linux/capability.h> 25#include <linux/capability.h>
26#include <linux/syscalls.h> 26#include <linux/syscalls.h>
27#include <linux/security.h> 27#include <linux/security.h>
28#include <linux/pid_namespace.h>
28 29
29static int set_task_ioprio(struct task_struct *task, int ioprio) 30static int set_task_ioprio(struct task_struct *task, int ioprio)
30{ 31{
@@ -93,7 +94,8 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio)
93 if (!who) 94 if (!who)
94 p = current; 95 p = current;
95 else 96 else
96 p = find_task_by_pid(who); 97 p = find_task_by_pid_ns(who,
98 current->nsproxy->pid_ns);
97 if (p) 99 if (p)
98 ret = set_task_ioprio(p, ioprio); 100 ret = set_task_ioprio(p, ioprio);
99 break; 101 break;
@@ -101,7 +103,7 @@ asmlinkage long sys_ioprio_set(int which, int who, int ioprio)
101 if (!who) 103 if (!who)
102 pgrp = task_pgrp(current); 104 pgrp = task_pgrp(current);
103 else 105 else
104 pgrp = find_pid(who); 106 pgrp = find_vpid(who);
105 do_each_pid_task(pgrp, PIDTYPE_PGID, p) { 107 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
106 ret = set_task_ioprio(p, ioprio); 108 ret = set_task_ioprio(p, ioprio);
107 if (ret) 109 if (ret)
@@ -180,7 +182,8 @@ asmlinkage long sys_ioprio_get(int which, int who)
180 if (!who) 182 if (!who)
181 p = current; 183 p = current;
182 else 184 else
183 p = find_task_by_pid(who); 185 p = find_task_by_pid_ns(who,
186 current->nsproxy->pid_ns);
184 if (p) 187 if (p)
185 ret = get_task_ioprio(p); 188 ret = get_task_ioprio(p);
186 break; 189 break;
@@ -188,7 +191,7 @@ asmlinkage long sys_ioprio_get(int which, int who)
188 if (!who) 191 if (!who)
189 pgrp = task_pgrp(current); 192 pgrp = task_pgrp(current);
190 else 193 else
191 pgrp = find_pid(who); 194 pgrp = find_vpid(who);
192 do_each_pid_task(pgrp, PIDTYPE_PGID, p) { 195 do_each_pid_task(pgrp, PIDTYPE_PGID, p) {
193 tmpio = get_task_ioprio(p); 196 tmpio = get_task_ioprio(p);
194 if (tmpio < 0) 197 if (tmpio < 0)