do_wait: simplify retval/tsk_result/notask_error mess
authorOleg Nesterov <oleg@redhat.com>
Wed, 17 Jun 2009 23:27:40 +0000 (16:27 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 18 Jun 2009 20:03:53 +0000 (13:03 -0700)
Now that we don't pass &retval down to other helpers we can simplify
the code more.

- kill tsk_result, just use retval

- add the "notask" label right after the main loop, and
  s/got end/goto notask/ after the fastpath pid check.

  This way we don't need to initialize retval before this
  check and the code becomes a bit more clean, if this pid
  has no attached tasks we should just skip the list search.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/exit.c

index 29622e468b7f208ceb0481b5cc9a69e020adb0cf..9c6881a0a8b40b71301d74eeeba6aff78327a5a5 100644 (file)
@@ -1576,27 +1576,22 @@ repeat:
         * might later match our criteria, even if we are not able to reap
         * it yet.
         */
-       retval = wo->notask_error = -ECHILD;
+       wo->notask_error = -ECHILD;
        if ((wo->wo_type < PIDTYPE_MAX) &&
           (!wo->wo_pid || hlist_empty(&wo->wo_pid->tasks[wo->wo_type])))
-               goto end;
+               goto notask;
 
        current->state = TASK_INTERRUPTIBLE;
        read_lock(&tasklist_lock);
        tsk = current;
        do {
-               int tsk_result = do_wait_thread(wo, tsk);
-
-               if (!tsk_result)
-                       tsk_result = ptrace_do_wait(wo, tsk);
+               retval = do_wait_thread(wo, tsk);
+               if (retval)
+                       goto end;
 
-               if (tsk_result) {
-                       /*
-                        * tasklist_lock is unlocked and we have a final result.
-                        */
-                       retval = tsk_result;
+               retval = ptrace_do_wait(wo, tsk);
+               if (retval)
                        goto end;
-               }
 
                if (wo->wo_flags & __WNOTHREAD)
                        break;
@@ -1605,6 +1600,7 @@ repeat:
        } while (tsk != current);
        read_unlock(&tasklist_lock);
 
+notask:
        retval = wo->notask_error;
        if (!retval && !(wo->wo_flags & WNOHANG)) {
                retval = -ERESTARTSYS;