diff -urN oldtree/mm/page_alloc.c newtree/mm/page_alloc.c
--- oldtree/mm/page_alloc.c	2006-08-18 15:01:22.000000000 -0400
+++ newtree/mm/page_alloc.c	2006-08-20 04:25:40.281394750 -0400
@@ -646,7 +646,7 @@
 #ifdef CONFIG_NUMA
 /*
  * Called from the slab reaper to drain pagesets on a particular node that
- * belong to the currently executing processor.
+ * belongs to the currently executing processor.
  * Note that this function must be called with the thread pinned to
  * a single processor.
  */
@@ -660,6 +660,9 @@
 		struct zone *zone = NODE_DATA(nodeid)->node_zones + z;
 		struct per_cpu_pageset *pset;
 
+		if (!populated_zone(zone))
+			continue;
+
 		pset = zone_pcp(zone, smp_processor_id());
 		for (i = 0; i < ARRAY_SIZE(pset->pcp); i++) {
 			struct per_cpu_pages *pcp;
diff -urN oldtree/mm/vmstat.c newtree/mm/vmstat.c
--- oldtree/mm/vmstat.c	2006-08-18 15:01:22.000000000 -0400
+++ newtree/mm/vmstat.c	2006-08-20 04:25:40.297395750 -0400
@@ -267,6 +267,9 @@
 	for_each_zone(zone) {
 		struct per_cpu_pageset *pcp;
 
+		if (!populated_zone(zone))
+			continue;
+
 		pcp = zone_pcp(zone, cpu);
 
 		for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
