On Mon, Apr 30, 2018 at 06:45:46PM +0200, Oleg Nesterov wrote: > On 04/30, Peter Zijlstra wrote: > > > > --- a/kernel/signal.c > > +++ b/kernel/signal.c > > @@ -1968,7 +1968,7 @@ static void ptrace_stop(int exit_code, i > > * atomic with respect to siglock and should be done after the arch > > * hook as siglock is released and regrabbed across it. > > */ > > - set_current_state(TASK_TRACED); > > + set_special_state(TASK_TRACED); > > Yes, but please note the comment above, we need a barrier after state = > TASK_TRACED, > that is why ptrace_stop() does set_current_state(), not __set_current_state().
OK, so I got properly lost in that stuff. The comment says it we need to set TASK_TRACED before clearing JOBCTL_TRAPPING because of do_wait(), but I cannot seem to locate code in do_wait() and below that cares about JOBCTL_TRAPPING. Could you elucidate my tired brain?

