[PATCH] Fix zone policy determination
The use k in the inner loop means that the highest zone nr is always used if any zone of a node is populated. This means that the policy zone is not correctly determined on arches that do no use HIGHMEM like ia64. Change the loop to decrement k which also simplifies the BUG_ON. Signed-off-by: Christoph Lameter <clameter@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
4be38e351c
commit
02a68a5ebc
|
@ -1465,15 +1465,19 @@ static int __init build_zonelists_node(pg_data_t *pgdat,
|
|||
struct zone *zone;
|
||||
|
||||
BUG_ON(k > ZONE_HIGHMEM);
|
||||
for (zone = pgdat->node_zones + k; zone >= pgdat->node_zones; zone--) {
|
||||
|
||||
do {
|
||||
zone = pgdat->node_zones + k;
|
||||
if (populated_zone(zone)) {
|
||||
#ifndef CONFIG_HIGHMEM
|
||||
BUG_ON(zone - pgdat->node_zones > ZONE_NORMAL);
|
||||
BUG_ON(k > ZONE_NORMAL);
|
||||
#endif
|
||||
zonelist->zones[j++] = zone;
|
||||
check_highest_zone(k);
|
||||
}
|
||||
}
|
||||
k--;
|
||||
|
||||
} while (k >= 0);
|
||||
return j;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue