diff options
Diffstat (limited to 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index f5a7abb621f3..b0c6f0c3a2df 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/profile.h> | 26 | #include <linux/profile.h> |
27 | #include <linux/mount.h> | 27 | #include <linux/mount.h> |
28 | #include <linux/proc_fs.h> | 28 | #include <linux/proc_fs.h> |
29 | #include <linux/kthread.h> | ||
29 | #include <linux/mempolicy.h> | 30 | #include <linux/mempolicy.h> |
30 | #include <linux/taskstats_kern.h> | 31 | #include <linux/taskstats_kern.h> |
31 | #include <linux/delayacct.h> | 32 | #include <linux/delayacct.h> |
@@ -254,26 +255,25 @@ static int has_stopped_jobs(struct pid *pgrp) | |||
254 | } | 255 | } |
255 | 256 | ||
256 | /** | 257 | /** |
257 | * reparent_to_init - Reparent the calling kernel thread to the init task of the pid space that the thread belongs to. | 258 | * reparent_to_kthreadd - Reparent the calling kernel thread to kthreadd |
258 | * | 259 | * |
259 | * If a kernel thread is launched as a result of a system call, or if | 260 | * If a kernel thread is launched as a result of a system call, or if |
260 | * it ever exits, it should generally reparent itself to init so that | 261 | * it ever exits, it should generally reparent itself to kthreadd so it |
261 | * it is correctly cleaned up on exit. | 262 | * isn't in the way of other processes and is correctly cleaned up on exit. |
262 | * | 263 | * |
263 | * The various task state such as scheduling policy and priority may have | 264 | * The various task state such as scheduling policy and priority may have |
264 | * been inherited from a user process, so we reset them to sane values here. | 265 | * been inherited from a user process, so we reset them to sane values here. |
265 | * | 266 | * |
266 | * NOTE that reparent_to_init() gives the caller full capabilities. | 267 | * NOTE that reparent_to_kthreadd() gives the caller full capabilities. |
267 | */ | 268 | */ |
268 | static void reparent_to_init(void) | 269 | static void reparent_to_kthreadd(void) |
269 | { | 270 | { |
270 | write_lock_irq(&tasklist_lock); | 271 | write_lock_irq(&tasklist_lock); |
271 | 272 | ||
272 | ptrace_unlink(current); | 273 | ptrace_unlink(current); |
273 | /* Reparent to init */ | 274 | /* Reparent to init */ |
274 | remove_parent(current); | 275 | remove_parent(current); |
275 | current->parent = child_reaper(current); | 276 | current->real_parent = current->parent = kthreadd_task; |
276 | current->real_parent = child_reaper(current); | ||
277 | add_parent(current); | 277 | add_parent(current); |
278 | 278 | ||
279 | /* Set the exit signal to SIGCHLD so we signal init on exit */ | 279 | /* Set the exit signal to SIGCHLD so we signal init on exit */ |
@@ -347,7 +347,7 @@ int disallow_signal(int sig) | |||
347 | return -EINVAL; | 347 | return -EINVAL; |
348 | 348 | ||
349 | spin_lock_irq(¤t->sighand->siglock); | 349 | spin_lock_irq(¤t->sighand->siglock); |
350 | sigaddset(¤t->blocked, sig); | 350 | current->sighand->action[(sig)-1].sa.sa_handler = SIG_IGN; |
351 | recalc_sigpending(); | 351 | recalc_sigpending(); |
352 | spin_unlock_irq(¤t->sighand->siglock); | 352 | spin_unlock_irq(¤t->sighand->siglock); |
353 | return 0; | 353 | return 0; |
@@ -400,7 +400,7 @@ void daemonize(const char *name, ...) | |||
400 | current->files = init_task.files; | 400 | current->files = init_task.files; |
401 | atomic_inc(¤t->files->count); | 401 | atomic_inc(¤t->files->count); |
402 | 402 | ||
403 | reparent_to_init(); | 403 | reparent_to_kthreadd(); |
404 | } | 404 | } |
405 | 405 | ||
406 | EXPORT_SYMBOL(daemonize); | 406 | EXPORT_SYMBOL(daemonize); |