For review only. Add CLONE_KERNEL_THREAD to kthread_create() and change reparent_to_init() to match CLONE_KERNEL_THREAD.
Signed-off-by: Oleg Nesterov <[EMAIL PROTECTED]> kthread.c | 2 +- exit.c | 20 +++++++++----------- 2 files changed, 10 insertions(+), 12 deletions(-) --- 2.6.21-rc5-mm4/kernel/kthread.c~3_USE 2007-04-05 12:18:28.000000000 +0400 +++ 2.6.21-rc5-mm4/kernel/kthread.c 2007-04-08 19:18:59.000000000 +0400 @@ -120,7 +120,7 @@ static void keventd_create_kthread(struc int pid; /* We want our own signal handler (we take no signals by default). */ - pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD); + pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | CLONE_KERNEL_THREAD); if (pid < 0) { create->result = ERR_PTR(pid); } else { --- 2.6.21-rc5-mm4/kernel/exit.c~3_USE 2007-04-08 19:06:27.000000000 +0400 +++ 2.6.21-rc5-mm4/kernel/exit.c 2007-04-08 19:23:18.000000000 +0400 @@ -279,28 +279,26 @@ static int has_stopped_jobs(struct pid * } /** - * reparent_to_init - Reparent the calling kernel thread to the init task of the pid space that the thread belongs to. + * reparent_kthread - Reparent the calling kernel thread to swapper. * * If a kernel thread is launched as a result of a system call, or if - * it ever exits, it should generally reparent itself to init so that - * it is correctly cleaned up on exit. + * it ever exits, it should generally reparent itself so that it is + * correctly cleaned up on exit. * * The various task state such as scheduling policy and priority may have * been inherited from a user process, so we reset them to sane values here. * - * NOTE that reparent_to_init() gives the caller full capabilities. + * NOTE that reparent_kthread() gives the caller full capabilities. */ -static void reparent_to_init(void) +static void reparent_kthread(void) { write_lock_irq(&tasklist_lock); - /* Reparent to init */ remove_parent(current); - current->parent = child_reaper(current); - add_parent(current); - /* Set the exit signal to SIGCHLD so we signal init on exit */ - current->exit_signal = SIGCHLD; + current->parent = &init_task; + add_parent(current); + current->exit_signal = -1; if (!has_rt_policy(current) && (task_nice(current) < 0)) set_user_nice(current, 0); @@ -423,7 +421,7 @@ void daemonize(const char *name, ...) current->files = init_task.files; atomic_inc(¤t->files->count); - reparent_to_init(); + reparent_kthread(); } EXPORT_SYMBOL(daemonize); - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/