From: Oleg Nesterov Every branch if the main "if" statement does the same code at the end. Move it down. Also, fix the indentation. Signed-off-by: Oleg Nesterov Cc: Roland McGrath Signed-off-by: Andrew Morton --- kernel/exit.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff -puN kernel/exit.c~do_wait-factor-out-retval-=-0-checks kernel/exit.c --- a/kernel/exit.c~do_wait-factor-out-retval-=-0-checks +++ a/kernel/exit.c @@ -1507,6 +1507,7 @@ repeat: } allowed = 1; + retval = 0; if (is_task_stopped_or_traced(p)) { /* * It's stopped now, so it might later @@ -1520,8 +1521,6 @@ repeat: retval = wait_task_stopped(p, ret == 2, (options & WNOWAIT), infop, stat_addr, ru); - if (retval != 0) /* He released the lock. */ - goto end; } else if (p->exit_state == EXIT_ZOMBIE) { /* * Eligible but we cannot release it yet: @@ -1533,9 +1532,6 @@ repeat: retval = wait_task_zombie(p, (options & WNOWAIT), infop, stat_addr, ru); - /* He released the lock. */ - if (retval != 0) - goto end; } else if (p->exit_state != EXIT_DEAD) { check_continued: /* @@ -1548,9 +1544,9 @@ check_continued: retval = wait_task_continued(p, (options & WNOWAIT), infop, stat_addr, ru); - if (retval != 0) /* He released the lock. */ - goto end; } + if (retval != 0) /* tasklist_lock released */ + goto end; } if (!flag) { list_for_each_entry(p, &tsk->ptrace_children, @@ -1586,7 +1582,7 @@ end: remove_wait_queue(¤t->signal->wait_chldexit,&wait); if (infop) { if (retval > 0) - retval = 0; + retval = 0; else { /* * For a WNOHANG return, clear out all the fields _