diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/mempolicy.c | 2 | ||||
-rw-r--r-- | mm/page_alloc.c | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index c3429a710ab1..8002e1faccda 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
@@ -1290,7 +1290,7 @@ struct page *alloc_pages_current(gfp_t gfp, unsigned order) | |||
1290 | 1290 | ||
1291 | if ((gfp & __GFP_WAIT) && !in_interrupt()) | 1291 | if ((gfp & __GFP_WAIT) && !in_interrupt()) |
1292 | cpuset_update_task_memory_state(); | 1292 | cpuset_update_task_memory_state(); |
1293 | if (!pol || in_interrupt()) | 1293 | if (!pol || in_interrupt() || (gfp & __GFP_THISNODE)) |
1294 | pol = &default_policy; | 1294 | pol = &default_policy; |
1295 | if (pol->policy == MPOL_INTERLEAVE) | 1295 | if (pol->policy == MPOL_INTERLEAVE) |
1296 | return alloc_page_interleave(gfp, order, interleave_nodes(pol)); | 1296 | return alloc_page_interleave(gfp, order, interleave_nodes(pol)); |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 208a6b03aa78..ea498788af53 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -893,6 +893,9 @@ get_page_from_freelist(gfp_t gfp_mask, unsigned int order, | |||
893 | * See also cpuset_zone_allowed() comment in kernel/cpuset.c. | 893 | * See also cpuset_zone_allowed() comment in kernel/cpuset.c. |
894 | */ | 894 | */ |
895 | do { | 895 | do { |
896 | if (unlikely((gfp_mask & __GFP_THISNODE) && | ||
897 | (*z)->zone_pgdat != zonelist->zones[0]->zone_pgdat)) | ||
898 | break; | ||
896 | if ((alloc_flags & ALLOC_CPUSET) && | 899 | if ((alloc_flags & ALLOC_CPUSET) && |
897 | !cpuset_zone_allowed(*z, gfp_mask)) | 900 | !cpuset_zone_allowed(*z, gfp_mask)) |
898 | continue; | 901 | continue; |