On Tue, Mar 20, 2018 at 09:58:59AM +0800, Ian Kent wrote: > On 20/03/18 03:16, Matthew Wilcox wrote: > > From: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> > > This playing with signals to allow only fatal signals appears to predate > > the introduction of wait_event_killable(), and I'm fairly sure that > > wait_event_killable is what was meant to happen here. > > Predates is an understatement, this is really, really old code. > Do I need to forward this to Al or Andrew? Looks like Andrew usually picks these up directly. Here's the line he'll want: Link: http://lkml.kernel.org/r/20180319191609.23880-1-willy@xxxxxxxxxxxxx > > Signed-off-by: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx> > Signed-off-by: Ian Kent <raven@xxxxxxxxxx> > > + wait_event_killable(wq->queue, wq->name.name == NULL); > > The wait event code looks like this will wake up on most any unmasked signal. > But my assumption is that TASK_KILLABLE tasks are only forwarded specific > signals ... > > Is that right or am I missing something? The signal code is gnarly. As far as I can decipher it, a fatal signal is always turned into SIGKILL (in complete_signal()), and the task is woken. For a task sleeping in TASK_KILLABLE, signal_wake_up() passes TASK_WAKEKILL to signal_wake_up_state() if the signal is SIGKILL. TASK_KILLABLE sets (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE) so it will be woken in order to die. If the signal being sent isn't sig_fatal(), then we don't wake the task. The signal will still be in the pending set, so it can notice when exiting to userspace, but it won't be woken. -- To unsubscribe from this list: send the line "unsubscribe autofs" in