aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/page_alloc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index a840e702722c..86f2984f8b79 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -685,9 +685,15 @@ void drain_node_pages(int nodeid)
685 685
686 pcp = &pset->pcp[i]; 686 pcp = &pset->pcp[i];
687 if (pcp->count) { 687 if (pcp->count) {
688 int to_drain;
689
688 local_irq_save(flags); 690 local_irq_save(flags);
689 free_pages_bulk(zone, pcp->count, &pcp->list, 0); 691 if (pcp->count >= pcp->batch)
690 pcp->count = 0; 692 to_drain = pcp->batch;
693 else
694 to_drain = pcp->count;
695 free_pages_bulk(zone, to_drain, &pcp->list, 0);
696 pcp->count -= to_drain;
691 local_irq_restore(flags); 697 local_irq_restore(flags);
692 } 698 }
693 } 699 }