On 06/06, Eric W. Biederman wrote: > > Which if I have had enough sleep reduces this patch to just: > > diff --git a/kernel/exit.c b/kernel/exit.c > index f072959fcab7..c8156366b722 100644 > --- a/kernel/exit.c > +++ b/kernel/exit.c > @@ -1431,8 +1431,10 @@ static int child_wait_callback(wait_queue_entry_t > *wait, unsigned mode, > if (!eligible_pid(wo, p)) > return 0; > > - if ((wo->wo_flags & __WNOTHREAD) && wait->private != p->parent) > - return 0; > + if ((wo->wo_flags & __WNOTHREAD) && > + (wait->private != p->parent) && > + (wait->private != p->real_parent)) > + return 0; > > return default_wake_function(wait, mode, sync, key); > } > > > I think that solves the issue without missing wake-ups without adding > any more.
Agreed, and looks much simpler. > For the same set of reasons it looks like the __wake_up_parent in > __ptrace_detach is just simply dead code. I don't think there is a case > where when !ptrace_reparented the thread that is the real_parent can > sleep in do_wait when the thread that was calling ptrace could not. Yes... this doesn't really differ from the case when one thread reaps a natural child and another thread sleep in do_wait(). > That needs a very close look to confirm. Yes. Oleg. _______________________________________________ linux-um mailing list linux-um@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-um