|
@@ -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;
|
|
|
}
|
|
|
|