This removes an unneeded completion from kthread_create and moves wake_up_process out of the kthread_create_lock making it clear that wake_up_process doesn't need the protection of the kthread_create_lock.
Signed-off-by: Eric W. Biederman <[EMAIL PROTECTED]> --- kernel/kthread.c | 16 ++++++---------- 1 files changed, 6 insertions(+), 10 deletions(-) diff --git a/kernel/kthread.c b/kernel/kthread.c index 06c7e51..cd89b49 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -24,7 +24,6 @@ struct kthread_create_info /* Information passed to kthread() from kthreadd. */ int (*threadfn)(void *data); void *data; - struct completion started; /* Result passed back to kthread_create() from kthreadd. */ struct task_struct *result; @@ -41,6 +40,9 @@ static int kthread(void *_create) void *data; int ret = -EINTR; + /* Report which task_struct I am */ + create->result = current; + /* Setup a completion on this thread's stack */ init_completion(&done); current->vfork_done = &done; @@ -51,7 +53,7 @@ static int kthread(void *_create) /* OK, tell user we're spawned, wait for stop or wakeup */ __set_current_state(TASK_INTERRUPTIBLE); - complete(&create->started); + complete(&create->done); schedule(); if (!kthread_should_stop()) @@ -68,13 +70,8 @@ static void create_kthread(struct kthread_create_info *create) pid = kernel_thread(kthread, create, CLONE_FS | CLONE_FILES | SIGCHLD); if (pid < 0) { create->result = ERR_PTR(pid); - } else { - wait_for_completion(&create->started); - read_lock(&tasklist_lock); - create->result = find_task_by_pid(pid); - read_unlock(&tasklist_lock); + complete(&create->done); } - complete(&create->done); } /** @@ -105,14 +102,13 @@ struct task_struct *kthread_create(int (*threadfn)(void *data), create.threadfn = threadfn; create.data = data; - init_completion(&create.started); init_completion(&create.done); spin_lock(&kthread_create_lock); list_add_tail(&create.list, &kthread_create_list); - wake_up_process(kthreadd_task); spin_unlock(&kthread_create_lock); + wake_up_process(kthreadd_task); wait_for_completion(&create.done); if (!IS_ERR(create.result)) { -- 1.5.0.g53756 - 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/