diff --git a/mm/slab.c b/mm/slab.c
index 068cb4503c15fcb50d6421b10f3b7d7b8f6ab771..e90b6100a9274fd72722f8bbfa3e5007d59ee8b6 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -3182,7 +3182,7 @@ retry:
 	for (z = zonelist->zones; *z && !obj; z++) {
 		nid = zone_to_nid(*z);
 
-		if (cpuset_zone_allowed(*z, flags) &&
+		if (cpuset_zone_allowed(*z, flags | __GFP_HARDWALL) &&
 			cache->nodelists[nid] &&
 			cache->nodelists[nid]->free_objects)
 				obj = ____cache_alloc_node(cache,