[PATCH] fix find_next_best_node

From: Jesse Barnes
Date: Thu Nov 04 2004 - 13:07:19 EST


If NUMA is enabled, find_next_best_node is responsible for helping build the
zonelist for each pgdat in the system. However, if one sets
PENALTY_FOR_NODE_WITH_CPUS to a large value in an attempt to prefer nodes w/o
CPUs, the local node is erroneously placed after all nodes w/o CPUs in the
pgdat's zonelist. This small patch fixes that by just checking if the local
node is part of the zonelist yet, and if not, returns it first.

Signed-off-by: Jesse Barnes <jbarnes@xxxxxxx>

Thanks,
Jesse
===== mm/page_alloc.c 1.239 vs edited =====
--- 1.239/mm/page_alloc.c 2004-10-25 13:06:48 -07:00
+++ edited/mm/page_alloc.c 2004-11-04 09:41:23 -08:00
@@ -1213,6 +1213,12 @@
if (test_bit(n, used_node_mask))
continue;

+ /* Use the local node if we haven't already */
+ if (!test_bit(node, used_node_mask)) {
+ best_node = node;
+ break;
+ }
+
/* Use the distance array to find the distance */
val = node_distance(node, n);