Messages in this thread | | | Date | Mon, 1 Jun 2009 22:56:02 -0700 | From | Andrew Morton <> | Subject | Re: [patch 3/3 -mmotm] oom: invoke oom killer for __GFP_NOFAIL |
| |
On Mon, 1 Jun 2009 18:31:14 -0700 (PDT) David Rientjes <rientjes@google.com> wrote:
> The oom killer must be invoked regardless of the order if the allocation > is __GFP_NOFAIL, otherwise it will loop forever when reclaim fails to > free some memory. > > Cc: Nick Piggin <npiggin@suse.de> > Cc: Rik van Riel <riel@redhat.com> > Cc: Mel Gorman <mel@csn.ul.ie> > Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> > Cc: Christoph Lameter <cl@linux-foundation.org> > Cc: Dave Hansen <dave@linux.vnet.ibm.com> > Signed-off-by: David Rientjes <rientjes@google.com> > --- > mm/page_alloc.c | 12 +++++++----- > 1 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/mm/page_alloc.c b/mm/page_alloc.c > --- a/mm/page_alloc.c > +++ b/mm/page_alloc.c > @@ -1547,7 +1547,7 @@ __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order, > goto out; > > /* The OOM killer will not help higher order allocs */ > - if (order > PAGE_ALLOC_COSTLY_ORDER) > + if (order > PAGE_ALLOC_COSTLY_ORDER && !(gfp_mask & __GFP_NOFAIL)) > goto out; > > /* Exhausted what can be done so it's blamo time */ > @@ -1765,11 +1765,13 @@ rebalance: > goto got_pg; > > /* > - * The OOM killer does not trigger for high-order allocations > - * but if no progress is being made, there are no other > - * options and retrying is unlikely to help > + * The OOM killer does not trigger for high-order > + * ~__GFP_NOFAIL allocations so if no progress is being > + * made, there are no other options and retrying is > + * unlikely to help. > */ > - if (order > PAGE_ALLOC_COSTLY_ORDER) > + if (order > PAGE_ALLOC_COSTLY_ORDER && > + !(gfp_mask & __GFP_NOFAIL)) > goto nopage; > > goto restart;
I really think/hope/expect that this is unneeded.
Do we know of any callsites which do greater-than-order-0 allocations with GFP_NOFAIL? If so, we should fix them.
Then just ban order>0 && GFP_NOFAIL allocations.
| |