From 89e7e10615eab97cf19306ca7ce6191d1ac4e668 Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Wed, 6 Dec 2006 20:33:26 -0800 Subject: [PATCH] --- yaml --- r: 42698 b: refs/heads/master c: 952f3b51beb592f3f1de15adcdef802fc086ea91 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index b3f6c61f462f..061b0c874483 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5bcd234d881d83ac0259c6d42d98f134e31c60a8 +refs/heads/master: 952f3b51beb592f3f1de15adcdef802fc086ea91 diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index 5d123b399713..dc8753bdd47e 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/mm/page_alloc.c @@ -1151,6 +1151,17 @@ __alloc_pages(gfp_t gfp_mask, unsigned int order, if (page) goto got_pg; + /* + * GFP_THISNODE (meaning __GFP_THISNODE, __GFP_NORETRY and + * __GFP_NOWARN set) should not cause reclaim since the subsystem + * (f.e. slab) using GFP_THISNODE may choose to trigger reclaim + * using a larger set of nodes after it has established that the + * allowed per node queues are empty and that nodes are + * over allocated. + */ + if (NUMA_BUILD && (gfp_mask & GFP_THISNODE) == GFP_THISNODE) + goto nopage; + for (z = zonelist->zones; *z; z++) wakeup_kswapd(*z, order);