diff --git a/[refs] b/[refs] index 8dcf749c40df..25240c4bcb5c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7516795739bd53175629b90fab0ad488d7a6a9f7 +refs/heads/master: aedb0eb107961a234f7c38e53da65a8f7ea992a9 diff --git a/trunk/mm/slab.c b/trunk/mm/slab.c index 266449d604bd..84c631f30741 100644 --- a/trunk/mm/slab.c +++ b/trunk/mm/slab.c @@ -3152,12 +3152,15 @@ void *fallback_alloc(struct kmem_cache *cache, gfp_t flags) struct zone **z; void *obj = NULL; - for (z = zonelist->zones; *z && !obj; z++) + for (z = zonelist->zones; *z && !obj; z++) { + int nid = zone_to_nid(*z); + if (zone_idx(*z) <= ZONE_NORMAL && - cpuset_zone_allowed(*z, flags)) + cpuset_zone_allowed(*z, flags) && + cache->nodelists[nid]) obj = __cache_alloc_node(cache, - flags | __GFP_THISNODE, - zone_to_nid(*z)); + flags | __GFP_THISNODE, nid); + } return obj; }