On Tue, Oct 25, 2016 at 6:08 PM, Oleg Nesterov <[email protected]> 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

