|
@@ -2218,7 +2218,7 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
|
|
unsigned long count, struct list_head *list,
|
|
|
int migratetype, bool cold)
|
|
|
{
|
|
|
- int i;
|
|
|
+ int i, alloced = 0;
|
|
|
|
|
|
spin_lock(&zone->lock);
|
|
|
for (i = 0; i < count; ++i) {
|
|
@@ -2243,13 +2243,21 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
|
|
else
|
|
|
list_add_tail(&page->lru, list);
|
|
|
list = &page->lru;
|
|
|
+ alloced++;
|
|
|
if (is_migrate_cma(get_pcppage_migratetype(page)))
|
|
|
__mod_zone_page_state(zone, NR_FREE_CMA_PAGES,
|
|
|
-(1 << order));
|
|
|
}
|
|
|
+
|
|
|
+ /*
|
|
|
+ * i pages were removed from the buddy list even if some leak due
|
|
|
+ * to check_pcp_refill failing so adjust NR_FREE_PAGES based
|
|
|
+ * on i. Do not confuse with 'alloced' which is the number of
|
|
|
+ * pages added to the pcp list.
|
|
|
+ */
|
|
|
__mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
|
|
|
spin_unlock(&zone->lock);
|
|
|
- return i;
|
|
|
+ return alloced;
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_NUMA
|