Re: [PATCH v3 1/1] workqueue: ignore dead tasks in a workqueue sleep hook

From: Roman Penyaev
Date: Tue Oct 25 2016 - 14:17:32 EST


On Tue, Oct 25, 2016 at 6:08 PM, Oleg Nesterov <oleg@xxxxxxxxxx> wrote:
> sorry for noise, forgot to mention...
>
> On 10/25, Oleg Nesterov wrote:
>>
>> On 10/25, Oleg Nesterov wrote:
>> >
>> > void oops_end_exit(void)
>> > {
>> > current->flags &= ~PF_WQ_WORKER;
>> > perhaps sonething else;
>> > }
>> >
>> > called by oops_end() before rewind_stack_do_exit() ?
>>
>> and "perhaps sonething else" above should probably clear current->plug,
>> it likely points to "struct blk_plug" on stack.
>>
>> and perhaps call task_work_run(). Currently only irq_thread() uses the
>> "destructor" work on stack, but think can have more users.
>
> and, probably absorb some code from do_exit(), say set_fs(USER_DS) and/or
> PF_EXITING check.

I agree that for stack which was rewound we need more cleanups. But in the
current patch I do not want to mix several cases. Here I try to avoid access
to a NULL pointer of a dead task. That is not related to a corrupted stack.

Regarding the PF_WQ_WORKER flags. I liked the idea that workqueue itself
should be able to detect that task is dead. Spreading the code which does
flags cleanup for a special workqueue case IMO is not nice.

And, indeed, PF_EXITING looks more generic. Thanks. I will resend this.

--
Roman