Memoryless nodes: 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. [Lee.Schermerhorn@hp.com: Move setup of N_CPU node state mask] Signed-off-by: Christoph Lameter <clameter@sgi.com> Tested-by: Lee Schermerhorn <lee.schermerhorn@hp.com> Acked-by: Bob Picco <bob.picco@hp.com> Cc: Nishanth Aravamudan <nacc@us.ibm.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Mel Gorman <mel@skynet.ie> Signed-off-by: Lee Schermerhorn <lee.schermerhorn@hp.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
56bbd65df0
commit
37c0708dbe
@ -349,6 +349,7 @@ enum node_states {
|
|||||||
#else
|
#else
|
||||||
N_HIGH_MEMORY = N_NORMAL_MEMORY,
|
N_HIGH_MEMORY = N_NORMAL_MEMORY,
|
||||||
#endif
|
#endif
|
||||||
|
N_CPU, /* The node has one or more cpus */
|
||||||
NR_NODE_STATES
|
NR_NODE_STATES
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2353,6 +2353,9 @@ static struct per_cpu_pageset boot_pageset[NR_CPUS];
|
|||||||
static int __cpuinit process_zones(int cpu)
|
static int __cpuinit process_zones(int cpu)
|
||||||
{
|
{
|
||||||
struct zone *zone, *dzone;
|
struct zone *zone, *dzone;
|
||||||
|
int node = cpu_to_node(cpu);
|
||||||
|
|
||||||
|
node_set_state(node, N_CPU); /* this node has a cpu */
|
||||||
|
|
||||||
for_each_zone(zone) {
|
for_each_zone(zone) {
|
||||||
|
|
||||||
@ -2360,7 +2363,7 @@ static int __cpuinit process_zones(int cpu)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
zone_pcp(zone, cpu) = kmalloc_node(sizeof(struct per_cpu_pageset),
|
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))
|
if (!zone_pcp(zone, cpu))
|
||||||
goto bad;
|
goto bad;
|
||||||
|
|
||||||
|
@ -1853,7 +1853,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
|
|||||||
|
|
||||||
int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
|
int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
|
||||||
{
|
{
|
||||||
cpumask_t mask;
|
|
||||||
int node_id;
|
int node_id;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1890,8 +1889,7 @@ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
|
|||||||
* as wide as possible.
|
* as wide as possible.
|
||||||
*/
|
*/
|
||||||
node_id = zone_to_nid(zone);
|
node_id = zone_to_nid(zone);
|
||||||
mask = node_to_cpumask(node_id);
|
if (node_state(node_id, N_CPU) && node_id != numa_node_id())
|
||||||
if (!cpus_empty(mask) && node_id != numa_node_id())
|
|
||||||
return 0;
|
return 0;
|
||||||
return __zone_reclaim(zone, gfp_mask, order);
|
return __zone_reclaim(zone, gfp_mask, order);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user