aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/page_alloc.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 8c4f1b220ab9..c1c6cb78e5ca 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1257,15 +1257,11 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
1257void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp) 1257void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
1258{ 1258{
1259 unsigned long flags; 1259 unsigned long flags;
1260 int to_drain; 1260 int to_drain, batch;
1261 unsigned long batch;
1262 1261
1263 local_irq_save(flags); 1262 local_irq_save(flags);
1264 batch = ACCESS_ONCE(pcp->batch); 1263 batch = ACCESS_ONCE(pcp->batch);
1265 if (pcp->count >= batch) 1264 to_drain = min(pcp->count, batch);
1266 to_drain = batch;
1267 else
1268 to_drain = pcp->count;
1269 if (to_drain > 0) { 1265 if (to_drain > 0) {
1270 free_pcppages_bulk(zone, to_drain, pcp); 1266 free_pcppages_bulk(zone, to_drain, pcp);
1271 pcp->count -= to_drain; 1267 pcp->count -= to_drain;