OpenVZ Forum


Home » Mailing lists » Devel » Fwd: [PATCH] pidspace is_init()
Fwd: [PATCH] pidspace is_init() [message #4908] Tue, 01 August 2006 17:28 Go to next message
Sukadev Bhattiprolu is currently offline  Sukadev Bhattiprolu
Messages: 413
Registered: August 2006
Senior Member
CCing Vserver and OpenVz lists.

BTW, can we add these two lists to the lxc-devel list ?

----- Forwarded message from Sukadev Bhattiprolu <sukadev@us.ibm.com> -----

| Date: Tue, 1 Aug 2006 09:41:26 -0700
| From: Sukadev Bhattiprolu <sukadev@us.ibm.com>
| To: Linux Containers on Source Forge <lxc-devel@lists.sourceforge.net>,
| ebiederm@xmission.com
| Cc: haveblue@us.ibm.com, clg@fr.ibm.com, serue@us.ibm.com,
| sukadev@us.ibm.com
| Subject: [PATCH] pidspace is_init()
|
| Eric,
|
| This is an updated version of your is_init() patch.
| (http://lkml.org/lkml/2006/2/6/280). It applies cleanly to 2.6.18-rc2
| and replaces a few more instances of ->pid == 1 with is_init().
|
| Further, is_init() checks pid (for now) and thus removes dependency on
| your other patches.
|
| Please review and let me know if I can send it out to LKML.
|
| Couple of questions:
|
| Are there cases where child_reaper is not pid = 1. Should the
| "tsk == child_reaper" check in do_exit() be replaced with is_init() ?
|
| Looks like, we would need a similar, is_idle() wrapper for "pid==0"
| checks - although the name is_idle_task() maybe more intuitive. If
| so, should we rename is_init() to is_init_task() ?
|
|
| Eric's original description:
|
| There are a lot of places in the kernel where we test for init
| because we give it special properties. Most significantly init
| must not die. This results in code all over the kernel test
| ->pid == 1.
|
| Introduce is_init to capture this case.
|
| With multiple pid spaces for all of the cases affected we are
| looking for only the first process on the system, not some other
| process that has pid == 1.
|
| Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
| Signed-off-by: Sukadev Bhattiprolu <sukadev@us.ibm.com>
| Cc: Dave Hansen <haveblue@us.ibm.com>
| Cc: Serge Hallyn <serue@us.ibm.com>
| Cc: Cedric Le Goater <clg@fr.ibm.com>
| Cc: lxc-devel@lists.sourceforge.net
|
|
| arch/alpha/mm/fault.c | 2 +-
| arch/arm/mm/fault.c | 2 +-
| arch/arm26/mm/fault.c | 2 +-
| arch/i386/lib/usercopy.c | 2 +-
| arch/i386/mm/fault.c | 2 +-
| arch/ia64/mm/fault.c | 2 +-
| arch/m32r/mm/fault.c | 2 +-
| arch/m68k/mm/fault.c | 2 +-
| arch/mips/mm/fault.c | 2 +-
| arch/powerpc/mm/fault.c | 2 +-
| arch/powerpc/platforms/pseries/ras.c | 2 +-
| arch/ppc/kernel/traps.c | 2 +-
| arch/ppc/mm/fault.c | 2 +-
| arch/s390/mm/fault.c | 2 +-
| arch/sh/mm/fault.c | 2 +-
| arch/sh64/mm/fault.c | 6 +++---
| arch/um/kernel/trap.c | 2 +-
| arch/x86_64/mm/fault.c | 4 ++--
| arch/xtensa/mm/fault.c | 2 +-
| drivers/char/sysrq.c | 2 +-
| include/linux/sched.h | 10 ++++++++++
| kernel/capability.c | 2 +-
| kernel/cpuset.c | 2 +-
| kernel/exit.c | 2 +-
| kernel/kexec.c | 2 +-
| kernel/ptrace.c | 1 +
| kernel/sysctl.c | 2 +-
| mm/oom_kill.c | 6 +++---
| security/commoncap.c | 2 +-
| security/seclvl.c | 9 +++++----
| 30 files changed, 48 insertions(+), 36 deletions(-)
|
| Index: linux-2.6.18-rc2c/arch/alpha/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/alpha/mm/fault.c 2006-07-28 09:20:03.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/alpha/mm/fault.c 2006-07-28 09:35:37.000000000 -0700
| @@ -193,7 +193,7 @@ do_page_fault(unsigned long address, uns
| /* We ran out of memory, or some other thing happened to us that
| made us unable to handle the page fault gracefully. */
| out_of_memory:
| - if (current->pid == 1) {
| + if (is_init(current)) {
| yield();
| down_read(&mm->mmap_sem);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/arm/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/arm/mm/fault.c 2006-07-28 09:20:04.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/arm/mm/fault.c 2006-07-31 17:53:40.000000000 -0700
| @@ -197,7 +197,7 @@ survive:
| return fault;
| }
|
| - if (tsk->pid != 1)
| + if (!is_init(tsk))
| goto out;
|
| /*
| Index: linux-2.6.18-rc2c/arch/arm26/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/arm26/mm/fault.c 2006-07-28 09:19:59.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/arm26/mm/fault.c 2006-07-31 22:48:32.000000000 -0700
| @@ -185,7 +185,7 @@ survive:
| }
|
| fault = -3; /* out of memory */
| - if (tsk->pid != 1)
| + if (!is_init(tsk))
| goto out;
|
| /*
| Index: linux-2.6.18-rc2c/arch/i386/lib/usercopy.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/i386/lib/usercopy.c 2006-07-28 09:19:49.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/i386/lib/usercopy.c 2006-07-28 09:35:37.000000000 -0700
| @@ -739,7 +739,7 @@ survive:
| retval = get_user_pages(current, current->mm,
| (unsigned long )to, 1, 1, 0, &pg, NULL);
|
| - if (retval == -ENOMEM && current->pid == 1) {
| + if (retval == -ENOMEM && is_init(current)) {
| up_read(&current->mm->mmap_sem);
| blk_congestion_wait(WRITE, HZ/50);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/i386/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/i386/mm/fault.c 2006-07-28 09:19:49.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/i386/mm/fault.c 2006-07-28 09:35:37.000000000 -0700
| @@ -598,7 +598,7 @@ no_context:
| */
| out_of_memory:
| up_read(&mm->mmap_sem);
| - if (tsk->pid == 1) {
| + if (is_init(tsk)) {
| yield();
| down_read(&mm->mmap_sem);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/ia64/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/ia64/mm/fault.c 2006-07-28 09:20:02.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/ia64/mm/fault.c 2006-07-28 09:35:37.000000000 -0700
| @@ -278,7 +278,7 @@ ia64_do_page_fault (unsigned long addres
|
| out_of_memory:
| up_read(&mm->mmap_sem);
| - if (current->pid == 1) {
| + if (is_init(current)) {
| yield();
| down_read(&mm->mmap_sem);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/m32r/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/m32r/mm/fault.c 2006-07-28 09:20:09.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/m32r/mm/fault.c 2006-07-28 09:35:37.000000000 -0700
| @@ -299,7 +299,7 @@ no_context:
| */
| out_of_memory:
| up_read(&mm->mmap_sem);
| - if (tsk->pid == 1) {
| + if (is_init(tsk)) {
| yield();
| down_read(&mm->mmap_sem);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/m68k/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/m68k/mm/fault.c 2006-07-28 09:20:00.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/m68k/mm/fault.c 2006-07-28 09:35:37.000000000 -0700
| @@ -181,7 +181,7 @@ good_area:
| */
| out_of_memory:
| up_read(&mm->mmap_sem);
| - if (current->pid == 1) {
| + if (is_init(current)) {
| yield();
| down_read(&mm->mmap_sem);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/mips/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/mips/mm/fault.c 2006-07-28 09:19:54.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/mips/mm/fault.c 2006-07-28 09:35:37.000000000 -0700
| @@ -171,7 +171,7 @@ no_context:
| */
| out_of_memory:
| up_read(&mm->mmap_sem);
| - if (tsk->pid == 1) {
| + if (is_init(tsk)) {
| yield();
| down_read(&mm->mmap_sem);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/powerpc/mm/fault.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/powerpc/mm/fault.c 2006-07-28 09:20:10.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/powerpc/mm/fault.c 2006-07-28 09:35:37.000000000 -0700
| @@ -386,7 +386,7 @@ bad_area_nosemaphore:
| */
| out_of_memory:
| up_read(&mm->mmap_sem);
| - if (current->pid == 1) {
| + if (is_init(current)) {
| yield();
| down_read(&mm->mmap_sem);
| goto survive;
| Index: linux-2.6.18-rc2c/arch/powerpc/platforms/pseries/ras.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/powerpc/platforms/pseries/ras.c 2006-07-28 09:20:10.000000000 -0700
| +++ linux-2.6.18-rc2c/arch/powerpc/platforms/pseries/ras.c 2006-07-28 09:35:37.000000000 -0700
| @@ -337,7 +337,7 @@ static int recover_mce(struct pt_regs *r
| err->disposition == RTAS_DISP_NOT_RECOVERED &&
| err->target == RTAS_TARGET_MEMORY &&
| err->type == RTAS_TYPE_ECC_UNCORR &&
| - !(current->pid == 0 || current->pid == 1)) {
| + !(current->pid == 0 || is_init(current))) {
| /* Kill off a user process with an ECC error */
| printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n",
| current->pid);
| Index: linux-2.6.18-rc2c/arch/ppc/kernel/traps.c
| ============================================================ =======
| --- linux-2.6.18-rc2c.orig/arch/ppc/kernel/traps.c 2006-07-28 09:19:52.000000000 -070
...

Re: Fwd: [PATCH] pidspace is_init() [message #4909 is a reply to message #4908] Wed, 02 August 2006 07:30 Go to previous messageGo to next message
kir is currently offline  kir
Messages: 1645
Registered: August 2005
Location: Moscow, Russia
Senior Member

Sukadev Bhattiprolu wrote:
> CCing Vserver and OpenVz lists.
>
> BTW, can we add these two lists to the lxc-devel list ?
Sure, feel free.
Re: Fwd: [PATCH] pidspace is_init() [message #4961 is a reply to message #4909] Fri, 04 August 2006 20:17 Go to previous message
Sukadev Bhattiprolu is currently offline  Sukadev Bhattiprolu
Messages: 413
Registered: August 2006
Senior Member
Hi,

I added Vserver and Openvz lists to lxcdevel and sent a test mail.
Can you please let me know if you don't receive the mail in say 24
hours ?

Suka

Kir Kolyshkin [kir@openvz.org] wrote:
| Sukadev Bhattiprolu wrote:
| >CCing Vserver and OpenVz lists.
| >
| >BTW, can we add these two lists to the lxc-devel list ?
| Sure, feel free.
Previous Topic: [Lxc-devel] Test
Next Topic: Q: libvzctl-simfs
Goto Forum:
  


Current Time: Thu Oct 17 17:28:14 GMT 2024

Total time taken to generate the page: 0.05418 seconds