Re: [PATCH] mm,oom: use per signal_struct flag rather than clear TIF_MEMDIE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon 27-06-16 22:40:17, Oleg Nesterov wrote:
> On 06/25, Tetsuo Handa wrote:
> >
> > Oleg Nesterov wrote:
> > > And in any case I don't understand this patch but I have to admit that
> > > I failed to force myself to read the changelog and the actual change ;)
> > > In any case I agree that we should not set MMF_MEMDIE if ->mm == NULL,
> > > and if we ensure this then I do not understand why we can't rely on
> > > MMF_OOM_REAPED. Ignoring the obvious races, if ->oom_victims != 0 then
> > > find_lock_task_mm() should succed.
> >
> > Since we are using
> >
> >   mm = current->mm;
> >   current->mm = NULL;
> >   __mmput(mm); (may block for unbounded period waiting for somebody else's memory allocation)
> >   exit_oom_victim(current);
> >
> > sequence, we won't be able to make find_lock_task_mm(tsk) != NULL when
> > tsk->signal->oom_victims != 0 unless we change this sequence.
> 
> Ah, but this is clear, note the "Ignoring the obvious races" above.
> Can't we fix this race? I am a bit lost, but iirc we want this anyway
> to ensure that we do not set TIF_MEMDIE if ->mm == NULL ?

This is not about a race it is about not reaching exit_oom_victim and
unblock the oom killer from selecting another victim.

> Hmm. Although I am not sure I really understand the "may block for
> unbounded period ..." above. Do you mean khugepaged_exit?

__mmput->exit_aio can wait for IO to complete and who knows what that
might depend on. Who knows how many others are lurking there.

-- 
Michal Hocko
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]