From: Oleg Nesterov The "p->exit_signal == -1 && p->ptrace == 0" check and the comment are bogus. We already did exactly the same check in eligible_child(), we did not drop tasklist_lock since then, and both variables need write_lock(tasklist) to be changed. Signed-off-by: Oleg Nesterov Cc: Roland McGrath Signed-off-by: Andrew Morton --- kernel/exit.c | 7 ------- 1 files changed, 7 deletions(-) diff -puN kernel/exit.c~wait_task_zombie-dont-fight-with-non-existing-race-with-a-dying-ptracee kernel/exit.c --- a/kernel/exit.c~wait_task_zombie-dont-fight-with-non-existing-race-with-a-dying-ptracee +++ a/kernel/exit.c @@ -1197,13 +1197,6 @@ static int wait_task_zombie(struct task_ BUG_ON(state != EXIT_DEAD); return 0; } - if (unlikely(p->exit_signal == -1 && p->ptrace == 0)) { - /* - * This can only happen in a race with a ptraced thread - * dying on another processor. - */ - return 0; - } /* traced means p->ptrace, but not vice versa */ traced = (p->real_parent != p->parent); _