atmel_serial: clean up the code
[sfrench/cifs-2.6.git] / kernel / kmod.c
index 9809cc1f33d6c030e63fa2cc9092b4ee608459e5..bb7df2a28bd719d07978593cb10f7264b6f43f3b 100644 (file)
@@ -451,13 +451,11 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info,
                             enum umh_wait wait)
 {
        DECLARE_COMPLETION_ONSTACK(done);
-       int retval;
+       int retval = 0;
 
        helper_lock();
-       if (sub_info->path[0] == '\0') {
-               retval = 0;
+       if (sub_info->path[0] == '\0')
                goto out;
-       }
 
        if (!khelper_wq || usermodehelper_disabled) {
                retval = -EBUSY;
@@ -468,13 +466,14 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info,
        sub_info->wait = wait;
 
        queue_work(khelper_wq, &sub_info->work);
-       if (wait == UMH_NO_WAIT) /* task has freed sub_info */
-               return 0;
+       if (wait == UMH_NO_WAIT)        /* task has freed sub_info */
+               goto unlock;
        wait_for_completion(&done);
        retval = sub_info->retval;
 
-  out:
+out:
        call_usermodehelper_freeinfo(sub_info);
+unlock:
        helper_unlock();
        return retval;
 }
@@ -505,7 +504,7 @@ int call_usermodehelper_pipe(char *path, char **argv, char **envp,
        if (ret < 0)
                goto out;
 
-       return call_usermodehelper_exec(sub_info, 1);
+       return call_usermodehelper_exec(sub_info, UMH_WAIT_EXEC);
 
   out:
        call_usermodehelper_freeinfo(sub_info);