Messages in this thread | | | Date | Tue, 15 Mar 2011 19:53:16 +0100 | From | Oleg Nesterov <> | Subject | Re: [PATCH 1/3 for 2.6.38] oom: oom_kill_process: don't set TIF_MEMDIE if !p->mm |
| |
On 03/14, David Rientjes wrote: > > On Mon, 14 Mar 2011, Oleg Nesterov wrote: > > > oom_kill_process() simply sets TIF_MEMDIE and returns if PF_EXITING. > > This is very wrong by many reasons. In particular, this thread can > > be the dead group leader. Check p->mm != NULL. > > > > This is true only for the oom_kill_allocating_task sysctl where it is > required in all cases to kill current; current won't be triggering the oom > killer if it's dead. > > oom_kill_process() is called with the thread selected by > select_bad_process() and that function will not return any thread if any > eligible task is found to be PF_EXITING and is not current, or any > eligible task is found to have TIF_MEMDIE. > > In other words, for this conditional to be true in oom_kill_process(), > then p must be current and so it cannot be the dead group leader as > specified in your changelog unless PF_EXITING gets set between > select_bad_process() and the oom_kill_process() call: we don't care about > that since it's in the exit path and we therefore want to give it access > to memory reserves to quickly exit anyway and the check for PF_EXITING in > select_bad_process() prevents any infinite loop of that task getting > constantly reselected if it's dead.
Confused. I sent the test-case. OK, may be you meant the code in -mm, but I meant the current code.
Oleg.
| |