Index: linux-2.6.9/mm/hugetlb.c =================================================================== --- linux-2.6.9.orig/mm/hugetlb.c 2004-10-22 13:28:27.000000000 -0700 +++ linux-2.6.9/mm/hugetlb.c 2004-10-25 16:56:22.000000000 -0700 @@ -32,14 +32,17 @@ { int nid = numa_node_id(); struct page *page = NULL; - - if (list_empty(&hugepage_freelists[nid])) { - for (nid = 0; nid < MAX_NUMNODES; ++nid) - if (!list_empty(&hugepage_freelists[nid])) - break; + struct zonelist *zonelist = NODE_DATA(nid)->node_zonelists; + struct zone **zones = zonelist->zones; + struct zone *z; + int i; + + for(i=0; (z = zones[i])!= NULL; i++) { + nid = z->zone_pgdat->node_id; + if (!list_empty(&hugepage_freelists[nid])) + break; } - if (nid >= 0 && nid < MAX_NUMNODES && - !list_empty(&hugepage_freelists[nid])) { + if (z) { page = list_entry(hugepage_freelists[nid].next, struct page, lru); list_del(&page->lru);