From 8d6728fdca2f8909ca8dfb63da47f34d02601a1a Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Fri, 27 Jul 2007 15:44:27 -0400 Subject: [PATCH] Add N_CPU node state We need the check for a node with cpu in zone reclaim. Zone reclaim will not allow remote zone reclaim if a node has a cpu. Signed-off-by: Christoph Lameter Tested-by: Lee Schermerhorn Acked-by: Bob Picco --- include/linux/nodemask.h | 1 + mm/page_alloc.c | 4 +++- mm/vmscan.c | 4 +--- 3 files changed, 5 insertions(+), 4 deletions(-) Index: linux-2.6/include/linux/nodemask.h =================================================================== --- linux-2.6.orig/include/linux/nodemask.h 2007-07-31 21:16:30.000000000 -0700 +++ linux-2.6/include/linux/nodemask.h 2007-07-31 21:24:32.000000000 -0700 @@ -345,6 +345,7 @@ enum node_states { N_ONLINE, /* The node is online */ N_NORMAL_MEMORY, /* The node has regular memory */ N_HIGH_MEMORY, /* The node has regular or high memory */ + N_CPU, /* The node has one or more cpus */ NR_NODE_STATES }; Index: linux-2.6/mm/page_alloc.c =================================================================== --- linux-2.6.orig/mm/page_alloc.c 2007-07-31 21:18:29.000000000 -0700 +++ linux-2.6/mm/page_alloc.c 2007-07-31 21:24:48.000000000 -0700 @@ -2325,6 +2325,7 @@ static struct per_cpu_pageset boot_pages static int __cpuinit process_zones(int cpu) { struct zone *zone, *dzone; + int node = cpu_to_node(cpu); for_each_zone(zone) { @@ -2332,7 +2333,7 @@ static int __cpuinit process_zones(int c continue; zone_pcp(zone, cpu) = kmalloc_node(sizeof(struct per_cpu_pageset), - GFP_KERNEL, cpu_to_node(cpu)); + GFP_KERNEL, node); if (!zone_pcp(zone, cpu)) goto bad; @@ -2343,6 +2344,7 @@ static int __cpuinit process_zones(int c (zone->present_pages / percpu_pagelist_fraction)); } + node_set_state(node, N_CPU); return 0; bad: for_each_zone(dzone) { Index: linux-2.6/mm/vmscan.c =================================================================== --- linux-2.6.orig/mm/vmscan.c 2007-07-31 21:19:42.000000000 -0700 +++ linux-2.6/mm/vmscan.c 2007-07-31 21:23:57.000000000 -0700 @@ -1794,7 +1794,6 @@ static int __zone_reclaim(struct zone *z int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order) { - cpumask_t mask; int node_id; /* @@ -1831,8 +1830,7 @@ int zone_reclaim(struct zone *zone, gfp_ * as wide as possible. */ node_id = zone_to_nid(zone); - mask = node_to_cpumask(node_id); - if (!cpus_empty(mask) && node_id != numa_node_id()) + if (node_state(node_id, N_CPU) && node_id != numa_node_id()) return 0; return __zone_reclaim(zone, gfp_mask, order); }