lkml.org 
[lkml]   [2009]   [May]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [patch -mmotm] mm: invoke oom killer for __GFP_NOFAIL
On Sat, May 09, 2009 at 03:46:39PM -0700, David Rientjes 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: Mel Gorman <mel@csn.ul.ie>
> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
> Cc: Nick Piggin <npiggin@suse.de>
> 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 | 16 ++++++----------
> 1 files changed, 6 insertions(+), 10 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 */
> @@ -1763,16 +1763,12 @@ rebalance:
> migratetype);
> if (page)
> goto got_pg;
> + if ((gfp_mask & __GFP_NOFAIL) ||
> + order <= PAGE_ALLOC_COSTLY_ORDER)
> + goto restart;
>

Can this get a comment explaining the intention like the code you are
removing had? Something like this?

/*
* The OOM killer only triggers for lower order allocation
* requests and when __GFP_NOFAIL is specified to prevent
* endlessly looping. Only retry the allocation if the OOM
* killer was used.
*/

Otherwise, it looks ok.

Acked-by: Mel Gorman <mel@csn.ul.ie>

One related question, what is doing a costly-high-order allocation request
with __GFP_NOFAIL specified?

> - /*
> - * 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
> - */
> - if (order > PAGE_ALLOC_COSTLY_ORDER)
> - goto nopage;
> -
> - goto restart;
> + /* No freeing is possible so just fail */
> + goto nopage;


> }
> }
>
>

--
Mel Gorman
Part-time Phd Student Linux Technology Center
University of Limerick IBM Dublin Software Lab


\
 
 \ /
  Last update: 2009-05-11 12:43    [W:0.075 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site