diff -urpN lb1-2.5.44/include/linux/mmzone.h lb2-2.5.44/include/linux/mmzone.h --- lb1-2.5.44/include/linux/mmzone.h 2002-10-28 16:34:42.000000000 -0800 +++ lb2-2.5.44/include/linux/mmzone.h 2002-10-28 17:26:15.000000000 -0800 @@ -26,8 +26,8 @@ #endif struct free_area { - struct list_head free_list; - unsigned long *map; + struct list_head free_list, deferred_pages; + unsigned long *map, globally_free, active, locally_free; }; struct pglist_data; diff -urpN lb1-2.5.44/mm/page_alloc.c lb2-2.5.44/mm/page_alloc.c --- lb1-2.5.44/mm/page_alloc.c 2002-10-28 17:18:53.000000000 -0800 +++ lb2-2.5.44/mm/page_alloc.c 2002-10-28 17:30:56.000000000 -0800 @@ -1262,8 +1262,11 @@ static void __init free_area_init_core(s local_offset += size; for (i = 0; ; i++) { unsigned long bitmap_size; - + INIT_LIST_HEAD(&zone->free_area[i].deferred_pages); INIT_LIST_HEAD(&zone->free_area[i].free_list); + zone->free_area[i].globally_free = 0; + zone->free_area[i].locally_free = 0; + zone->free_area[i].active = 0; if (i == MAX_ORDER-1) { zone->free_area[i].map = NULL; break;