diff options
Diffstat (limited to 'mm/page_alloc.c')
| -rw-r--r-- | mm/page_alloc.c | 10 |
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 | } |
