From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932497Ab1COTCn (ORCPT ); Tue, 15 Mar 2011 15:02:43 -0400 Received: from mx1.redhat.com ([209.132.183.28]:12056 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932485Ab1COTCl (ORCPT ); Tue, 15 Mar 2011 15:02:41 -0400 Date: Tue, 15 Mar 2011 19:53:16 +0100 From: Oleg Nesterov To: David Rientjes Cc: Hugh Dickins , Linus Torvalds , Andrew Morton , KOSAKI Motohiro , KAMEZAWA Hiroyuki , Andrey Vagin , Frantisek Hrbata , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/3 for 2.6.38] oom: oom_kill_process: don't set TIF_MEMDIE if !p->mm Message-ID: <20110315185316.GA21640@redhat.com> References: <20110309151946.dea51cde.akpm@linux-foundation.org> <20110312123413.GA18351@redhat.com> <20110312134341.GA27275@redhat.com> <20110313212726.GA24530@redhat.com> <20110314190419.GA21845@redhat.com> <20110314190446.GB21845@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.18 (2008-05-17) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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.