From d91c3654edf2d16989c21d04049132de5615c817 Mon Sep 17 00:00:00 2001 From: Neil Horman Date: Tue, 22 Sep 2009 16:43:36 -0700 Subject: [PATCH] --- yaml --- r: 164671 b: refs/heads/master c: c02e3f361c75da04ca3025b4d19e947e9cc62ed3 h: refs/heads/master i: 164669: ce8fc32dec31c2ab3c7f3b0e1dc9ddbcd1fa3a29 164667: a20d4bc95134b5438e8bdb1e6de41f0e1b1bf787 164663: d9370668ac4caa09a13c9d823d2e4f5c5d73cf07 164655: 4c83c3dffdadd902e615cc46405074895a41acc7 164639: 0511a0c8e0d3a5eb9897e9000645b0356040bfaf 164607: 3b7227b612bdead415b868eb9fe2a419f3953b0f v: v3 --- [refs] | 2 +- trunk/kernel/kmod.c | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 99d8ffcd9d49..3be0ad94139f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1fd7317d02ec03c6fdf072317841287933d06d24 +refs/heads/master: c02e3f361c75da04ca3025b4d19e947e9cc62ed3 diff --git a/trunk/kernel/kmod.c b/trunk/kernel/kmod.c index 9fcb53a11f87..689d20f39305 100644 --- a/trunk/kernel/kmod.c +++ b/trunk/kernel/kmod.c @@ -143,6 +143,7 @@ struct subprocess_info { static int ____call_usermodehelper(void *data) { struct subprocess_info *sub_info = data; + enum umh_wait wait = sub_info->wait; int retval; BUG_ON(atomic_read(&sub_info->cred->usage) != 1); @@ -184,10 +185,14 @@ static int ____call_usermodehelper(void *data) */ set_user_nice(current, 0); + if (wait == UMH_WAIT_EXEC) + complete(sub_info->complete); + retval = kernel_execve(sub_info->path, sub_info->argv, sub_info->envp); /* Exec failed? */ - sub_info->retval = retval; + if (wait != UMH_WAIT_EXEC) + sub_info->retval = retval; do_exit(0); } @@ -266,16 +271,14 @@ static void __call_usermodehelper(struct work_struct *work) switch (wait) { case UMH_NO_WAIT: + case UMH_WAIT_EXEC: break; case UMH_WAIT_PROC: if (pid > 0) break; sub_info->retval = pid; - /* FALLTHROUGH */ - - case UMH_WAIT_EXEC: - complete(sub_info->complete); + break; } }