From a71a50eefa508e988db024147aacdbd9137ba9ec Mon Sep 17 00:00:00 2001 From: Christoph Lameter Date: Wed, 6 Dec 2006 20:33:02 -0800 Subject: [PATCH] --- yaml --- r: 42681 b: refs/heads/master c: bc4ba393c007248f76c05945abb7b7b892cdd1cc h: refs/heads/master i: 42679: b2f4eb637d964a3dcf856edb5498e2af78e16176 v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) 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); } }