Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a8bbf72ab9b3072ece630d97689145b1a2f01221
Commit:     a8bbf72ab9b3072ece630d97689145b1a2f01221
Parent:     252e48389ed30d7c77385fb92fca765a680de408
Author:     Mel Gorman <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 31 00:37:30 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Jul 31 15:39:36 2007 -0700

    Do not trigger OOM-killer for high-order allocation failures
    
    out_of_memory() may be called when an allocation is failing and the direct
    reclaim is not making any progress.  This does not take into account the
    requested order of the allocation.  If the request if for an order larger
    than PAGE_ALLOC_COSTLY_ORDER, it is reasonable to fail the allocation
    because the kernel makes no guarantees about those allocations succeeding.
    
    This false OOM situation can occur if a user is trying to grow the hugepage
    pool in a script like;
    
    #!/bin/bash
    REQUIRED=$1
    echo 1 > /proc/sys/vm/hugepages_treat_as_movable
    echo $REQUIRED > /proc/sys/vm/nr_hugepages
    ACTUAL=`cat /proc/sys/vm/nr_hugepages`
    while [ $REQUIRED -ne $ACTUAL ]; do
        echo Huge page pool at $ACTUAL growing to $REQUIRED
        echo $REQUIRED > /proc/sys/vm/nr_hugepages
        ACTUAL=`cat /proc/sys/vm/nr_hugepages`
        sleep 1
    done
    
    This is a reasonable scenario when ZONE_MOVABLE is in use but triggers OOM
    easily on 2.6.23-rc1. This patch will fail an allocation for an order above
    PAGE_ALLOC_COSTLY_ORDER instead of killing processes and retrying.
    
    Signed-off-by: Mel Gorman <[EMAIL PROTECTED]>
    Acked-by: Andy Whitcroft <[EMAIL PROTECTED]>
    Cc: David Rientjes <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 mm/page_alloc.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 0bd4d82..3da85b8 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1350,6 +1350,10 @@ nofail_alloc:
                if (page)
                        goto got_pg;
 
+               /* The OOM killer will not help higher order allocs so fail */
+               if (order > PAGE_ALLOC_COSTLY_ORDER)
+                       goto nopage;
+
                out_of_memory(zonelist, gfp_mask, order);
                goto restart;
        }
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to