From: Oleg Nesterov wait_task_stopped() doesn't need the "delay_group_leader" parameter. If the child is not traced it must be a group leader. With or without subthreads ->group_stop_count == 0 when the whole task is stopped. Signed-off-by: Oleg Nesterov Cc: Mika Penttila Cc: Roland McGrath Signed-off-by: Andrew Morton --- kernel/exit.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff -puN kernel/exit.c~wait_task_stopped-remove-unneeded-delay_group_leader-check kernel/exit.c --- a/kernel/exit.c~wait_task_stopped-remove-unneeded-delay_group_leader-check +++ a/kernel/exit.c @@ -1349,7 +1349,7 @@ static int wait_task_zombie(struct task_ * the lock and this task is uninteresting. If we return nonzero, we have * released the lock and the system call should return. */ -static int wait_task_stopped(struct task_struct *p, int delayed_group_leader, +static int wait_task_stopped(struct task_struct *p, int noreap, struct siginfo __user *infop, int __user *stat_addr, struct rusage __user *ru) { @@ -1363,8 +1363,7 @@ static int wait_task_stopped(struct task if (unlikely(!is_task_stopped_or_traced(p))) goto unlock_sig; - if (delayed_group_leader && !(p->ptrace & PT_PTRACED) && - p->signal->group_stop_count > 0) + if (!(p->ptrace & PT_PTRACED) && p->signal->group_stop_count > 0) /* * A group stop is in progress and this is the group leader. * We won't report until all threads have stopped. @@ -1520,7 +1519,7 @@ repeat: !(options & WUNTRACED)) continue; - retval = wait_task_stopped(p, ret == 2, + retval = wait_task_stopped(p, (options & WNOWAIT), infop, stat_addr, ru); } else if (p->exit_state == EXIT_ZOMBIE) { _