Messages in this thread | | | Subject | Re: mm, oom_reaper: How to handle race with oom_killer_disable() ? | From | Tetsuo Handa <> | Date | Wed, 22 Jun 2016 06:47:48 +0900 |
| |
Michal Hocko wrote: > On Wed 22-06-16 00:32:29, Tetsuo Handa wrote: > > Michal Hocko wrote: > [...] > > > Hmm, what about the following instead. It is rather a workaround than a > > > full flaged fix but it seems much more easier and shouldn't introduce > > > new issues. > > > > Yes, I think that will work. But I think below patch (marking signal_struct > > to ignore TIF_MEMDIE instead of clearing TIF_MEMDIE from task_struct) on top of > > current linux.git will implement no-lockup requirement. No race is possible unlike > > "[PATCH 10/10] mm, oom: hide mm which is shared with kthread or global init". > > Not really. Because without the exit_oom_victim from oom_reaper you have > no guarantee that the oom_killer_disable will ever return. I have > mentioned that in the changelog. There is simply no guarantee the oom > victim will ever reach exit_mm->exit_oom_victim.
Why? Since any allocation after setting oom_killer_disabled = true will be forced to fail, nobody will be blocked on waiting for memory allocation. Thus, the TIF_MEMDIE tasks will eventually reach exit_mm->exit_oom_victim, won't it?
The only possibility that the TIF_MEMDIE tasks won't reach exit_mm->exit_oom_victim is __GFP_NOFAIL allocations failing to make forward progress even after ALLOC_NO_WATERMARKS is used. But that is a different problem which I think we can call panic() when __GFP_NOFAIL allocations failed after setting oom_killer_disabled = true.
| |