2006-01-17 14:50:58

by Serge E. Hallyn

[permalink] [raw]
Subject: RFC [patch 17/34] PID Virtualization return virtual process group ids

In this patch we now identify where in the kernel code conceptually
a virtual process group needs to be returned to userspace. This is
simply the extension of the previous patch which only dealt with
identify the location of virtual pid/tgid/ppids returns.

As in that patch, these locations are at the kernel/user interfaces.
and broadly they fall into 3 categories:
(a) syscall return parameter,
(b) syscall return code,
(c) through a datastructure filled in a syscall

Signed-off-by: Hubertus Franke <[email protected]>
---
fs/binfmt_elf.c | 4 ++--
fs/proc/array.c | 2 +-
kernel/sys.c | 8 ++++----
3 files changed, 7 insertions(+), 7 deletions(-)

Index: linux-2.6.15/fs/binfmt_elf.c
===================================================================
--- linux-2.6.15.orig/fs/binfmt_elf.c 2006-01-17 08:37:04.000000000 -0500
+++ linux-2.6.15/fs/binfmt_elf.c 2006-01-17 08:37:04.000000000 -0500
@@ -1272,7 +1272,7 @@
prstatus->pr_sighold = p->blocked.sig[0];
prstatus->pr_pid = task_vpid(p);
prstatus->pr_ppid = task_vppid(p);
- prstatus->pr_pgrp = process_group(p);
+ prstatus->pr_pgrp = virt_process_group(p);
prstatus->pr_sid = p->signal->session;
if (thread_group_leader(p)) {
/*
@@ -1318,7 +1318,7 @@

psinfo->pr_pid = task_vpid(p);
psinfo->pr_ppid = task_vppid(p);
- psinfo->pr_pgrp = process_group(p);
+ psinfo->pr_pgrp = virt_process_group(p);
psinfo->pr_sid = p->signal->session;

i = p->state ? ffz(~p->state) + 1 : 0;
Index: linux-2.6.15/fs/proc/array.c
===================================================================
--- linux-2.6.15.orig/fs/proc/array.c 2006-01-17 08:37:04.000000000 -0500
+++ linux-2.6.15/fs/proc/array.c 2006-01-17 08:37:04.000000000 -0500
@@ -374,7 +374,7 @@
tty_pgrp = task->signal->tty->pgrp;
tty_nr = new_encode_dev(tty_devnum(task->signal->tty));
}
- pgid = process_group(task);
+ pgid = virt_process_group(task);
sid = task->signal->session;
cmin_flt = task->signal->cmin_flt;
cmaj_flt = task->signal->cmaj_flt;
Index: linux-2.6.15/kernel/sys.c
===================================================================
--- linux-2.6.15.orig/kernel/sys.c 2006-01-17 08:36:59.000000000 -0500
+++ linux-2.6.15/kernel/sys.c 2006-01-17 08:37:04.000000000 -0500
@@ -1155,7 +1155,7 @@
asmlinkage long sys_getpgid(pid_t pid)
{
if (!pid) {
- return process_group(current);
+ return virt_process_group(current);
} else {
int retval;
struct task_struct *p;
@@ -1167,7 +1167,7 @@
if (p) {
retval = security_task_getpgid(p);
if (!retval)
- retval = process_group(p);
+ retval = virt_process_group(p);
}
read_unlock(&tasklist_lock);
return retval;
@@ -1179,7 +1179,7 @@
asmlinkage long sys_getpgrp(void)
{
/* SMP - assuming writes are word atomic this is fine */
- return process_group(current);
+ return virt_process_group(current);
}

#endif
@@ -1225,7 +1225,7 @@
__set_special_pids(task_pid(current), task_pid(current));
current->signal->tty = NULL;
current->signal->tty_old_pgrp = 0;
- err = process_group(current);
+ err = virt_process_group(current);
out:
write_unlock_irq(&tasklist_lock);
up(&tty_sem);

--