diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index b7f14a4799a52e3881548d91568908f7ed988eb3..a5c3f8bd98ae4edb299966d618c719f47ca175ac 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -943,7 +943,8 @@ __alloc_pages(gfp_t gfp_mask, unsigned int order,
 		goto got_pg;
 
 	do {
-		wakeup_kswapd(*z, order);
+		if (cpuset_zone_allowed(*z, gfp_mask))
+			wakeup_kswapd(*z, order);
 	} while (*(++z));
 
 	/*