diff --git a/[refs] b/[refs] index 504d94b826f2..824c596c1ac3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ebe29738f3934ad6a93c8bd76e30aa5d797a269d +refs/heads/master: bc4ba393c007248f76c05945abb7b7b892cdd1cc diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index a840e702722c..86f2984f8b79 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/mm/page_alloc.c @@ -685,9 +685,15 @@ void drain_node_pages(int nodeid) pcp = &pset->pcp[i]; if (pcp->count) { + int to_drain; + local_irq_save(flags); - free_pages_bulk(zone, pcp->count, &pcp->list, 0); - pcp->count = 0; + if (pcp->count >= pcp->batch) + to_drain = pcp->batch; + else + to_drain = pcp->count; + free_pages_bulk(zone, to_drain, &pcp->list, 0); + pcp->count -= to_drain; local_irq_restore(flags); } }