aboutsummaryrefslogtreecommitdiffstats
path: root/ipc/sem.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 /ipc/sem.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 'ipc/sem.c')
-rw-r--r--ipc/sem.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/ipc/sem.c b/ipc/sem.c
index b676fef6d208..64ff4261f4e2 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -795,7 +795,7 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
795 for (un = sma->undo; un; un = un->id_next) 795 for (un = sma->undo; un; un = un->id_next)
796 un->semadj[semnum] = 0; 796 un->semadj[semnum] = 0;
797 curr->semval = val; 797 curr->semval = val;
798 curr->sempid = current->tgid; 798 curr->sempid = task_tgid_vnr(current);
799 sma->sem_ctime = get_seconds(); 799 sma->sem_ctime = get_seconds();
800 /* maybe some queued-up processes were waiting for this */ 800 /* maybe some queued-up processes were waiting for this */
801 update_queue(sma); 801 update_queue(sma);
@@ -1196,7 +1196,7 @@ retry_undos:
1196 if (error) 1196 if (error)
1197 goto out_unlock_free; 1197 goto out_unlock_free;
1198 1198
1199 error = try_atomic_semop (sma, sops, nsops, un, current->tgid); 1199 error = try_atomic_semop (sma, sops, nsops, un, task_tgid_vnr(current));
1200 if (error <= 0) { 1200 if (error <= 0) {
1201 if (alter && error == 0) 1201 if (alter && error == 0)
1202 update_queue (sma); 1202 update_queue (sma);
@@ -1211,7 +1211,7 @@ retry_undos:
1211 queue.sops = sops; 1211 queue.sops = sops;
1212 queue.nsops = nsops; 1212 queue.nsops = nsops;
1213 queue.undo = un; 1213 queue.undo = un;
1214 queue.pid = current->tgid; 1214 queue.pid = task_tgid_vnr(current);
1215 queue.id = semid; 1215 queue.id = semid;
1216 queue.alter = alter; 1216 queue.alter = alter;
1217 if (alter) 1217 if (alter)
@@ -1382,7 +1382,7 @@ found:
1382 semaphore->semval = 0; 1382 semaphore->semval = 0;
1383 if (semaphore->semval > SEMVMX) 1383 if (semaphore->semval > SEMVMX)
1384 semaphore->semval = SEMVMX; 1384 semaphore->semval = SEMVMX;
1385 semaphore->sempid = current->tgid; 1385 semaphore->sempid = task_tgid_vnr(current);
1386 } 1386 }
1387 } 1387 }
1388 sma->sem_otime = get_seconds(); 1388 sma->sem_otime = get_seconds();