Index: linux-2.6.16-rc5-mm2/mm/page_alloc.c =================================================================== --- linux-2.6.16-rc5-mm2.orig/mm/page_alloc.c 2006-03-03 07:50:57.000000000 -0800 +++ linux-2.6.16-rc5-mm2/mm/page_alloc.c 2006-03-03 19:07:03.000000000 -0800 @@ -623,7 +623,6 @@ void drain_node_pages(int nodeid) int i, z; unsigned long flags; - local_irq_save(flags); for (z = 0; z < MAX_NR_ZONES; z++) { struct zone *zone = NODE_DATA(nodeid)->node_zones + z; struct per_cpu_pageset *pset; @@ -633,11 +632,12 @@ void drain_node_pages(int nodeid) struct per_cpu_pages *pcp; pcp = &pset->pcp[i]; + local_irq_save(flags); free_pages_bulk(zone, pcp->count, &pcp->list, 0); pcp->count = 0; + local_irq_restore(flags); } } - local_irq_restore(flags); } #endif