X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=kernel%2Fkmod.c;h=9fcb53a11f872e958c95bcf37f8558e9bb148d77;hb=952f72a8ceee3996ef8476a2f05ece1627080c20;hp=689d20f39305be5d72908dbdf85bdb187051bdcb;hpb=c37efa932598de5e30330a1414e34d9e082e0d9e;p=mv-sheeva.git diff --git a/kernel/kmod.c b/kernel/kmod.c index 689d20f3930..9fcb53a11f8 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -143,7 +143,6 @@ 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); @@ -185,14 +184,10 @@ 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? */ - if (wait != UMH_WAIT_EXEC) - sub_info->retval = retval; + sub_info->retval = retval; do_exit(0); } @@ -271,14 +266,16 @@ 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; - break; + /* FALLTHROUGH */ + + case UMH_WAIT_EXEC: + complete(sub_info->complete); } }