diff options
-rw-r--r-- | include/linux/nodemask.h | 1 | ||||
-rw-r--r-- | mm/page_alloc.c | 5 | ||||
-rw-r--r-- | mm/vmscan.c | 4 |
3 files changed, 6 insertions, 4 deletions
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h index ccee962f3559..905e18f4b412 100644 --- a/include/linux/nodemask.h +++ b/include/linux/nodemask.h | |||
@@ -349,6 +349,7 @@ enum node_states { | |||
349 | #else | 349 | #else |
350 | N_HIGH_MEMORY = N_NORMAL_MEMORY, | 350 | N_HIGH_MEMORY = N_NORMAL_MEMORY, |
351 | #endif | 351 | #endif |
352 | N_CPU, /* The node has one or more cpus */ | ||
352 | NR_NODE_STATES | 353 | NR_NODE_STATES |
353 | }; | 354 | }; |
354 | 355 | ||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 07dfd89992fa..161bcb711b30 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -2353,6 +2353,9 @@ static struct per_cpu_pageset boot_pageset[NR_CPUS]; | |||
2353 | static int __cpuinit process_zones(int cpu) | 2353 | static int __cpuinit process_zones(int cpu) |
2354 | { | 2354 | { |
2355 | struct zone *zone, *dzone; | 2355 | struct zone *zone, *dzone; |
2356 | int node = cpu_to_node(cpu); | ||
2357 | |||
2358 | node_set_state(node, N_CPU); /* this node has a cpu */ | ||
2356 | 2359 | ||
2357 | for_each_zone(zone) { | 2360 | for_each_zone(zone) { |
2358 | 2361 | ||
@@ -2360,7 +2363,7 @@ static int __cpuinit process_zones(int cpu) | |||
2360 | continue; | 2363 | continue; |
2361 | 2364 | ||
2362 | zone_pcp(zone, cpu) = kmalloc_node(sizeof(struct per_cpu_pageset), | 2365 | zone_pcp(zone, cpu) = kmalloc_node(sizeof(struct per_cpu_pageset), |
2363 | GFP_KERNEL, cpu_to_node(cpu)); | 2366 | GFP_KERNEL, node); |
2364 | if (!zone_pcp(zone, cpu)) | 2367 | if (!zone_pcp(zone, cpu)) |
2365 | goto bad; | 2368 | goto bad; |
2366 | 2369 | ||
diff --git a/mm/vmscan.c b/mm/vmscan.c index 876568847b71..8fd8ba1c67b4 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c | |||
@@ -1853,7 +1853,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) | |||
1853 | 1853 | ||
1854 | int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) | 1854 | int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) |
1855 | { | 1855 | { |
1856 | cpumask_t mask; | ||
1857 | int node_id; | 1856 | int node_id; |
1858 | 1857 | ||
1859 | /* | 1858 | /* |
@@ -1890,8 +1889,7 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) | |||
1890 | * as wide as possible. | 1889 | * as wide as possible. |
1891 | */ | 1890 | */ |
1892 | node_id = zone_to_nid(zone); | 1891 | node_id = zone_to_nid(zone); |
1893 | mask = node_to_cpumask(node_id); | 1892 | if (node_state(node_id, N_CPU) && node_id != numa_node_id()) |
1894 | if (!cpus_empty(mask) && node_id != numa_node_id()) | ||
1895 | return 0; | 1893 | return 0; |
1896 | return __zone_reclaim(zone, gfp_mask, order); | 1894 | return __zone_reclaim(zone, gfp_mask, order); |
1897 | } | 1895 | } |