diff options
author | Serge E. Hallyn <serue@us.ibm.com> | 2007-10-19 02:39:52 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-19 14:53:37 -0400 |
commit | b460cbc581a53cc088ceba80608021dd49c63c43 (patch) | |
tree | 83c28d0adbc15f4157c77b40fa60c40a71cb8673 /arch | |
parent | 3743ca05ff464b8a9e345c08a6c9ce30485f9805 (diff) |
pid namespaces: define is_global_init() and is_container_init()
is_init() is an ambiguous name for the pid==1 check. Split it into
is_global_init() and is_container_init().
A cgroup init has it's tsk->pid == 1.
A global init also has it's tsk->pid == 1 and it's active pid namespace
is the init_pid_ns. But rather than check the active pid namespace,
compare the task structure with 'init_pid_ns.child_reaper', which is
initialized during boot to the /sbin/init process and never changes.
Changelog:
2.6.22-rc4-mm2-pidns1:
- Use 'init_pid_ns.child_reaper' to determine if a given task is the
global init (/sbin/init) process. This would improve performance
and remove dependence on the task_pid().
2.6.21-mm2-pidns2:
- [Sukadev Bhattiprolu] Changed is_container_init() calls in {powerpc,
ppc,avr32}/traps.c for the _exception() call to is_global_init().
This way, we kill only the cgroup if the cgroup's init has a
bug rather than force a kernel panic.
[akpm@linux-foundation.org: fix comment]
[sukadev@us.ibm.com: Use is_global_init() in arch/m32r/mm/fault.c]
[bunk@stusta.de: kernel/pid.c: remove unused exports]
[sukadev@us.ibm.com: Fix capability.c to work with threaded init]
Signed-off-by: Serge E. Hallyn <serue@us.ibm.com>
Signed-off-by: Sukadev Bhattiprolu <sukadev@us.ibm.com>
Acked-by: Pavel Emelianov <xemul@openvz.org>
Cc: Eric W. Biederman <ebiederm@xmission.com>
Cc: Cedric Le Goater <clg@fr.ibm.com>
Cc: Dave Hansen <haveblue@us.ibm.com>
Cc: Herbert Poetzel <herbert@13thfloor.at>
Cc: Kirill Korotaev <dev@sw.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/arm/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/avr32/kernel/traps.c | 2 | ||||
-rw-r--r-- | arch/avr32/mm/fault.c | 6 | ||||
-rw-r--r-- | arch/ia64/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/m32r/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/m68k/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/mips/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/traps.c | 2 | ||||
-rw-r--r-- | arch/powerpc/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/pseries/ras.c | 2 | ||||
-rw-r--r-- | arch/ppc/kernel/traps.c | 2 | ||||
-rw-r--r-- | arch/ppc/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/s390/lib/uaccess_pt.c | 2 | ||||
-rw-r--r-- | arch/s390/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/sh/mm/fault.c | 2 | ||||
-rw-r--r-- | arch/sh64/mm/fault.c | 6 | ||||
-rw-r--r-- | arch/um/kernel/trap.c | 2 | ||||
-rw-r--r-- | arch/x86/lib/usercopy_32.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/fault_32.c | 2 | ||||
-rw-r--r-- | arch/x86/mm/fault_64.c | 2 | ||||
-rw-r--r-- | arch/xtensa/mm/fault.c | 2 |
22 files changed, 26 insertions, 26 deletions
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c index 25154df3055a..e0593e606140 100644 --- a/arch/alpha/mm/fault.c +++ b/arch/alpha/mm/fault.c | |||
@@ -188,7 +188,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr, | |||
188 | /* We ran out of memory, or some other thing happened to us that | 188 | /* We ran out of memory, or some other thing happened to us that |
189 | made us unable to handle the page fault gracefully. */ | 189 | made us unable to handle the page fault gracefully. */ |
190 | out_of_memory: | 190 | out_of_memory: |
191 | if (is_init(current)) { | 191 | if (is_global_init(current)) { |
192 | yield(); | 192 | yield(); |
193 | down_read(&mm->mmap_sem); | 193 | down_read(&mm->mmap_sem); |
194 | goto survive; | 194 | goto survive; |
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index 59ed1d05b71b..a8a7dab757eb 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c | |||
@@ -197,7 +197,7 @@ survive: | |||
197 | return fault; | 197 | return fault; |
198 | 198 | ||
199 | out_of_memory: | 199 | out_of_memory: |
200 | if (!is_init(tsk)) | 200 | if (!is_global_init(tsk)) |
201 | goto out; | 201 | goto out; |
202 | 202 | ||
203 | /* | 203 | /* |
diff --git a/arch/avr32/kernel/traps.c b/arch/avr32/kernel/traps.c index 9a73ce7eb50f..8a7caf8e7b45 100644 --- a/arch/avr32/kernel/traps.c +++ b/arch/avr32/kernel/traps.c | |||
@@ -89,7 +89,7 @@ void _exception(long signr, struct pt_regs *regs, int code, | |||
89 | * generate the same exception over and over again and we get | 89 | * generate the same exception over and over again and we get |
90 | * nowhere. Better to kill it and let the kernel panic. | 90 | * nowhere. Better to kill it and let the kernel panic. |
91 | */ | 91 | */ |
92 | if (is_init(current)) { | 92 | if (is_global_init(current)) { |
93 | __sighandler_t handler; | 93 | __sighandler_t handler; |
94 | 94 | ||
95 | spin_lock_irq(¤t->sighand->siglock); | 95 | spin_lock_irq(¤t->sighand->siglock); |
diff --git a/arch/avr32/mm/fault.c b/arch/avr32/mm/fault.c index 11472f8701bd..6560cb18b4e3 100644 --- a/arch/avr32/mm/fault.c +++ b/arch/avr32/mm/fault.c | |||
@@ -160,7 +160,7 @@ bad_area: | |||
160 | if (exception_trace && printk_ratelimit()) | 160 | if (exception_trace && printk_ratelimit()) |
161 | printk("%s%s[%d]: segfault at %08lx pc %08lx " | 161 | printk("%s%s[%d]: segfault at %08lx pc %08lx " |
162 | "sp %08lx ecr %lu\n", | 162 | "sp %08lx ecr %lu\n", |
163 | is_init(tsk) ? KERN_EMERG : KERN_INFO, | 163 | is_global_init(tsk) ? KERN_EMERG : KERN_INFO, |
164 | tsk->comm, tsk->pid, address, regs->pc, | 164 | tsk->comm, tsk->pid, address, regs->pc, |
165 | regs->sp, ecr); | 165 | regs->sp, ecr); |
166 | _exception(SIGSEGV, regs, code, address); | 166 | _exception(SIGSEGV, regs, code, address); |
@@ -209,7 +209,7 @@ no_context: | |||
209 | */ | 209 | */ |
210 | out_of_memory: | 210 | out_of_memory: |
211 | up_read(&mm->mmap_sem); | 211 | up_read(&mm->mmap_sem); |
212 | if (is_init(current)) { | 212 | if (is_global_init(current)) { |
213 | yield(); | 213 | yield(); |
214 | down_read(&mm->mmap_sem); | 214 | down_read(&mm->mmap_sem); |
215 | goto survive; | 215 | goto survive; |
@@ -231,7 +231,7 @@ do_sigbus: | |||
231 | if (exception_trace) | 231 | if (exception_trace) |
232 | printk("%s%s[%d]: bus error at %08lx pc %08lx " | 232 | printk("%s%s[%d]: bus error at %08lx pc %08lx " |
233 | "sp %08lx ecr %lu\n", | 233 | "sp %08lx ecr %lu\n", |
234 | is_init(tsk) ? KERN_EMERG : KERN_INFO, | 234 | is_global_init(tsk) ? KERN_EMERG : KERN_INFO, |
235 | tsk->comm, tsk->pid, address, regs->pc, | 235 | tsk->comm, tsk->pid, address, regs->pc, |
236 | regs->sp, ecr); | 236 | regs->sp, ecr); |
237 | 237 | ||
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index 32f26253c4e8..7571076a16a1 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c | |||
@@ -274,7 +274,7 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re | |||
274 | 274 | ||
275 | out_of_memory: | 275 | out_of_memory: |
276 | up_read(&mm->mmap_sem); | 276 | up_read(&mm->mmap_sem); |
277 | if (is_init(current)) { | 277 | if (is_global_init(current)) { |
278 | yield(); | 278 | yield(); |
279 | down_read(&mm->mmap_sem); | 279 | down_read(&mm->mmap_sem); |
280 | goto survive; | 280 | goto survive; |
diff --git a/arch/m32r/mm/fault.c b/arch/m32r/mm/fault.c index 70a766aad3e0..4a71df4c1b30 100644 --- a/arch/m32r/mm/fault.c +++ b/arch/m32r/mm/fault.c | |||
@@ -271,7 +271,7 @@ no_context: | |||
271 | */ | 271 | */ |
272 | out_of_memory: | 272 | out_of_memory: |
273 | up_read(&mm->mmap_sem); | 273 | up_read(&mm->mmap_sem); |
274 | if (is_init(tsk)) { | 274 | if (is_global_init(tsk)) { |
275 | yield(); | 275 | yield(); |
276 | down_read(&mm->mmap_sem); | 276 | down_read(&mm->mmap_sem); |
277 | goto survive; | 277 | goto survive; |
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c index eaa618681159..f493f03231d5 100644 --- a/arch/m68k/mm/fault.c +++ b/arch/m68k/mm/fault.c | |||
@@ -180,7 +180,7 @@ good_area: | |||
180 | */ | 180 | */ |
181 | out_of_memory: | 181 | out_of_memory: |
182 | up_read(&mm->mmap_sem); | 182 | up_read(&mm->mmap_sem); |
183 | if (is_init(current)) { | 183 | if (is_global_init(current)) { |
184 | yield(); | 184 | yield(); |
185 | down_read(&mm->mmap_sem); | 185 | down_read(&mm->mmap_sem); |
186 | goto survive; | 186 | goto survive; |
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c index 5699c7713e2f..fa636fc6b7b9 100644 --- a/arch/mips/mm/fault.c +++ b/arch/mips/mm/fault.c | |||
@@ -173,7 +173,7 @@ no_context: | |||
173 | */ | 173 | */ |
174 | out_of_memory: | 174 | out_of_memory: |
175 | up_read(&mm->mmap_sem); | 175 | up_read(&mm->mmap_sem); |
176 | if (is_init(tsk)) { | 176 | if (is_global_init(tsk)) { |
177 | yield(); | 177 | yield(); |
178 | down_read(&mm->mmap_sem); | 178 | down_read(&mm->mmap_sem); |
179 | goto survive; | 179 | goto survive; |
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index bf9e39c6e296..9fb4a6849c5a 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c | |||
@@ -201,7 +201,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
201 | * generate the same exception over and over again and we get | 201 | * generate the same exception over and over again and we get |
202 | * nowhere. Better to kill it and let the kernel panic. | 202 | * nowhere. Better to kill it and let the kernel panic. |
203 | */ | 203 | */ |
204 | if (is_init(current)) { | 204 | if (is_global_init(current)) { |
205 | __sighandler_t handler; | 205 | __sighandler_t handler; |
206 | 206 | ||
207 | spin_lock_irq(¤t->sighand->siglock); | 207 | spin_lock_irq(¤t->sighand->siglock); |
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index ab3546c5ac3a..a18fda361cc0 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c | |||
@@ -375,7 +375,7 @@ bad_area_nosemaphore: | |||
375 | */ | 375 | */ |
376 | out_of_memory: | 376 | out_of_memory: |
377 | up_read(&mm->mmap_sem); | 377 | up_read(&mm->mmap_sem); |
378 | if (is_init(current)) { | 378 | if (is_global_init(current)) { |
379 | yield(); | 379 | yield(); |
380 | down_read(&mm->mmap_sem); | 380 | down_read(&mm->mmap_sem); |
381 | goto survive; | 381 | goto survive; |
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c index 3a393c7f390e..a1ab25c7082f 100644 --- a/arch/powerpc/platforms/pseries/ras.c +++ b/arch/powerpc/platforms/pseries/ras.c | |||
@@ -332,7 +332,7 @@ static int recover_mce(struct pt_regs *regs, struct rtas_error_log * err) | |||
332 | err->disposition == RTAS_DISP_NOT_RECOVERED && | 332 | err->disposition == RTAS_DISP_NOT_RECOVERED && |
333 | err->target == RTAS_TARGET_MEMORY && | 333 | err->target == RTAS_TARGET_MEMORY && |
334 | err->type == RTAS_TYPE_ECC_UNCORR && | 334 | err->type == RTAS_TYPE_ECC_UNCORR && |
335 | !(current->pid == 0 || is_init(current))) { | 335 | !(current->pid == 0 || is_global_init(current))) { |
336 | /* Kill off a user process with an ECC error */ | 336 | /* Kill off a user process with an ECC error */ |
337 | printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n", | 337 | printk(KERN_ERR "MCE: uncorrectable ecc error for pid %d\n", |
338 | current->pid); | 338 | current->pid); |
diff --git a/arch/ppc/kernel/traps.c b/arch/ppc/kernel/traps.c index 3f3b292eb773..c78568905c3b 100644 --- a/arch/ppc/kernel/traps.c +++ b/arch/ppc/kernel/traps.c | |||
@@ -121,7 +121,7 @@ void _exception(int signr, struct pt_regs *regs, int code, unsigned long addr) | |||
121 | * generate the same exception over and over again and we get | 121 | * generate the same exception over and over again and we get |
122 | * nowhere. Better to kill it and let the kernel panic. | 122 | * nowhere. Better to kill it and let the kernel panic. |
123 | */ | 123 | */ |
124 | if (is_init(current)) { | 124 | if (is_global_init(current)) { |
125 | __sighandler_t handler; | 125 | __sighandler_t handler; |
126 | 126 | ||
127 | spin_lock_irq(¤t->sighand->siglock); | 127 | spin_lock_irq(¤t->sighand->siglock); |
diff --git a/arch/ppc/mm/fault.c b/arch/ppc/mm/fault.c index 94913ddcf76e..254c23b755e6 100644 --- a/arch/ppc/mm/fault.c +++ b/arch/ppc/mm/fault.c | |||
@@ -290,7 +290,7 @@ bad_area: | |||
290 | */ | 290 | */ |
291 | out_of_memory: | 291 | out_of_memory: |
292 | up_read(&mm->mmap_sem); | 292 | up_read(&mm->mmap_sem); |
293 | if (is_init(current)) { | 293 | if (is_global_init(current)) { |
294 | yield(); | 294 | yield(); |
295 | down_read(&mm->mmap_sem); | 295 | down_read(&mm->mmap_sem); |
296 | goto survive; | 296 | goto survive; |
diff --git a/arch/s390/lib/uaccess_pt.c b/arch/s390/lib/uaccess_pt.c index 60604b2819b2..b159a9d65680 100644 --- a/arch/s390/lib/uaccess_pt.c +++ b/arch/s390/lib/uaccess_pt.c | |||
@@ -64,7 +64,7 @@ out: | |||
64 | 64 | ||
65 | out_of_memory: | 65 | out_of_memory: |
66 | up_read(&mm->mmap_sem); | 66 | up_read(&mm->mmap_sem); |
67 | if (is_init(current)) { | 67 | if (is_global_init(current)) { |
68 | yield(); | 68 | yield(); |
69 | down_read(&mm->mmap_sem); | 69 | down_read(&mm->mmap_sem); |
70 | goto survive; | 70 | goto survive; |
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 14c241ccdd4d..2456b52ed068 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c | |||
@@ -211,7 +211,7 @@ static int do_out_of_memory(struct pt_regs *regs, unsigned long error_code, | |||
211 | struct mm_struct *mm = tsk->mm; | 211 | struct mm_struct *mm = tsk->mm; |
212 | 212 | ||
213 | up_read(&mm->mmap_sem); | 213 | up_read(&mm->mmap_sem); |
214 | if (is_init(tsk)) { | 214 | if (is_global_init(tsk)) { |
215 | yield(); | 215 | yield(); |
216 | down_read(&mm->mmap_sem); | 216 | down_read(&mm->mmap_sem); |
217 | return 1; | 217 | return 1; |
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c index 4729668ce5bf..f33cedb353fc 100644 --- a/arch/sh/mm/fault.c +++ b/arch/sh/mm/fault.c | |||
@@ -207,7 +207,7 @@ no_context: | |||
207 | */ | 207 | */ |
208 | out_of_memory: | 208 | out_of_memory: |
209 | up_read(&mm->mmap_sem); | 209 | up_read(&mm->mmap_sem); |
210 | if (is_init(current)) { | 210 | if (is_global_init(current)) { |
211 | yield(); | 211 | yield(); |
212 | down_read(&mm->mmap_sem); | 212 | down_read(&mm->mmap_sem); |
213 | goto survive; | 213 | goto survive; |
diff --git a/arch/sh64/mm/fault.c b/arch/sh64/mm/fault.c index dd81c669c79b..7aea586fc3d0 100644 --- a/arch/sh64/mm/fault.c +++ b/arch/sh64/mm/fault.c | |||
@@ -278,7 +278,7 @@ bad_area: | |||
278 | show_regs(regs); | 278 | show_regs(regs); |
279 | #endif | 279 | #endif |
280 | } | 280 | } |
281 | if (is_init(tsk)) { | 281 | if (is_global_init(tsk)) { |
282 | panic("INIT had user mode bad_area\n"); | 282 | panic("INIT had user mode bad_area\n"); |
283 | } | 283 | } |
284 | tsk->thread.address = address; | 284 | tsk->thread.address = address; |
@@ -320,14 +320,14 @@ no_context: | |||
320 | * us unable to handle the page fault gracefully. | 320 | * us unable to handle the page fault gracefully. |
321 | */ | 321 | */ |
322 | out_of_memory: | 322 | out_of_memory: |
323 | if (is_init(current)) { | 323 | if (is_global_init(current)) { |
324 | panic("INIT out of memory\n"); | 324 | panic("INIT out of memory\n"); |
325 | yield(); | 325 | yield(); |
326 | goto survive; | 326 | goto survive; |
327 | } | 327 | } |
328 | printk("fault:Out of memory\n"); | 328 | printk("fault:Out of memory\n"); |
329 | up_read(&mm->mmap_sem); | 329 | up_read(&mm->mmap_sem); |
330 | if (is_init(current)) { | 330 | if (is_global_init(current)) { |
331 | yield(); | 331 | yield(); |
332 | down_read(&mm->mmap_sem); | 332 | down_read(&mm->mmap_sem); |
333 | goto survive; | 333 | goto survive; |
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c index bd060551e619..cb3321f8e0a9 100644 --- a/arch/um/kernel/trap.c +++ b/arch/um/kernel/trap.c | |||
@@ -108,7 +108,7 @@ out_nosemaphore: | |||
108 | * us unable to handle the page fault gracefully. | 108 | * us unable to handle the page fault gracefully. |
109 | */ | 109 | */ |
110 | out_of_memory: | 110 | out_of_memory: |
111 | if (is_init(current)) { | 111 | if (is_global_init(current)) { |
112 | up_read(&mm->mmap_sem); | 112 | up_read(&mm->mmap_sem); |
113 | yield(); | 113 | yield(); |
114 | down_read(&mm->mmap_sem); | 114 | down_read(&mm->mmap_sem); |
diff --git a/arch/x86/lib/usercopy_32.c b/arch/x86/lib/usercopy_32.c index 9f38b12b4af1..8bab2b2efaff 100644 --- a/arch/x86/lib/usercopy_32.c +++ b/arch/x86/lib/usercopy_32.c | |||
@@ -748,7 +748,7 @@ survive: | |||
748 | retval = get_user_pages(current, current->mm, | 748 | retval = get_user_pages(current, current->mm, |
749 | (unsigned long )to, 1, 1, 0, &pg, NULL); | 749 | (unsigned long )to, 1, 1, 0, &pg, NULL); |
750 | 750 | ||
751 | if (retval == -ENOMEM && is_init(current)) { | 751 | if (retval == -ENOMEM && is_global_init(current)) { |
752 | up_read(¤t->mm->mmap_sem); | 752 | up_read(¤t->mm->mmap_sem); |
753 | congestion_wait(WRITE, HZ/50); | 753 | congestion_wait(WRITE, HZ/50); |
754 | goto survive; | 754 | goto survive; |
diff --git a/arch/x86/mm/fault_32.c b/arch/x86/mm/fault_32.c index 6555c3d14371..4fc5e400cf0a 100644 --- a/arch/x86/mm/fault_32.c +++ b/arch/x86/mm/fault_32.c | |||
@@ -587,7 +587,7 @@ no_context: | |||
587 | */ | 587 | */ |
588 | out_of_memory: | 588 | out_of_memory: |
589 | up_read(&mm->mmap_sem); | 589 | up_read(&mm->mmap_sem); |
590 | if (is_init(tsk)) { | 590 | if (is_global_init(tsk)) { |
591 | yield(); | 591 | yield(); |
592 | down_read(&mm->mmap_sem); | 592 | down_read(&mm->mmap_sem); |
593 | goto survive; | 593 | goto survive; |
diff --git a/arch/x86/mm/fault_64.c b/arch/x86/mm/fault_64.c index 5e0e54906c48..5149ac136a5d 100644 --- a/arch/x86/mm/fault_64.c +++ b/arch/x86/mm/fault_64.c | |||
@@ -554,7 +554,7 @@ no_context: | |||
554 | */ | 554 | */ |
555 | out_of_memory: | 555 | out_of_memory: |
556 | up_read(&mm->mmap_sem); | 556 | up_read(&mm->mmap_sem); |
557 | if (is_init(current)) { | 557 | if (is_global_init(current)) { |
558 | yield(); | 558 | yield(); |
559 | goto again; | 559 | goto again; |
560 | } | 560 | } |
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 2f842859948f..33f366be323f 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c | |||
@@ -145,7 +145,7 @@ bad_area: | |||
145 | */ | 145 | */ |
146 | out_of_memory: | 146 | out_of_memory: |
147 | up_read(&mm->mmap_sem); | 147 | up_read(&mm->mmap_sem); |
148 | if (is_init(current)) { | 148 | if (is_global_init(current)) { |
149 | yield(); | 149 | yield(); |
150 | down_read(&mm->mmap_sem); | 150 | down_read(&mm->mmap_sem); |
151 | goto survive; | 151 | goto survive; |