|
@@ -1158,8 +1158,10 @@ void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp)
|
|
|
to_drain = pcp->batch;
|
|
|
else
|
|
|
to_drain = pcp->count;
|
|
|
- free_pcppages_bulk(zone, to_drain, pcp);
|
|
|
- pcp->count -= to_drain;
|
|
|
+ if (to_drain > 0) {
|
|
|
+ free_pcppages_bulk(zone, to_drain, pcp);
|
|
|
+ pcp->count -= to_drain;
|
|
|
+ }
|
|
|
local_irq_restore(flags);
|
|
|
}
|
|
|
#endif
|
|
@@ -3915,7 +3917,8 @@ static int __zone_pcp_update(void *data)
|
|
|
pcp = &pset->pcp;
|
|
|
|
|
|
local_irq_save(flags);
|
|
|
- free_pcppages_bulk(zone, pcp->count, pcp);
|
|
|
+ if (pcp->count > 0)
|
|
|
+ free_pcppages_bulk(zone, pcp->count, pcp);
|
|
|
setup_pageset(pset, batch);
|
|
|
local_irq_restore(flags);
|
|
|
}
|