lkml.org 
[lkml]   [2009]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 08/11 -mmotm] oom: invoke oom killer for __GFP_NOFAIL
    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 | 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;

    \
     
     \ /
      Last update: 2009-05-11 00:13    [W:0.025 / U:0.924 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site