mm: build_zonelists(): move clear node_load[] to __build_all_zonelists()

If node_load[] is cleared everytime build_zonelists() is
called,node_load[] will have no help to find the next node that should
appear in the given node's fallback list.

Because of the bug, zonelist's node_order is not calculated as expected.
This bug affects on big machine, which has asynmetric node distance.

[synmetric NUMA's node distance]
0 1 2
0 10 12 12
1 12 10 12
2 12 12 10

[asynmetric NUMA's node distance]
0 1 2
0 10 12 20
1 12 10 14
2 20 14 10

This (my bug) is very old but no one has reported this for a long time.
Maybe because the number of asynmetric NUMA is very small and they use
cpuset for customizing node memory allocation fallback.

[akpm@linux-foundation.org: fix CONFIG_NUMA=n build]
Signed-off-by: Bo Liu <bo-liu@hotmail.com>
Reviewed-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Christoph Lameter <cl@linux-foundation.org>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Bo Liu and committed by Linus Torvalds 7f9cfb31 503f7944

+3 -1
+3 -1
mm/page_alloc.c
··· 2544 2544 prev_node = local_node; 2545 2545 nodes_clear(used_mask); 2546 2546 2547 - memset(node_load, 0, sizeof(node_load)); 2548 2547 memset(node_order, 0, sizeof(node_order)); 2549 2548 j = 0; 2550 2549 ··· 2652 2653 { 2653 2654 int nid; 2654 2655 2656 + #ifdef CONFIG_NUMA 2657 + memset(node_load, 0, sizeof(node_load)); 2658 + #endif 2655 2659 for_each_online_node(nid) { 2656 2660 pg_data_t *pgdat = NODE_DATA(nid); 2657 2661