|
@@ -1027,6 +1027,10 @@ static int try_to_steal_freepages(struct zone *zone, struct page *page,
|
|
|
{
|
|
|
int current_order = page_order(page);
|
|
|
|
|
|
+ /*
|
|
|
+ * When borrowing from MIGRATE_CMA, we need to release the excess
|
|
|
+ * buddy pages to CMA itself.
|
|
|
+ */
|
|
|
if (is_migrate_cma(fallback_type))
|
|
|
return fallback_type;
|
|
|
|
|
@@ -1091,17 +1095,8 @@ __rmqueue_fallback(struct zone *zone, int order, int start_migratetype)
|
|
|
list_del(&page->lru);
|
|
|
rmv_page_order(page);
|
|
|
|
|
|
- /*
|
|
|
- * Borrow the excess buddy pages as well, irrespective
|
|
|
- * of whether we stole freepages, or took ownership of
|
|
|
- * the pageblock or not.
|
|
|
- *
|
|
|
- * Exception: When borrowing from MIGRATE_CMA, release
|
|
|
- * the excess buddy pages to CMA itself.
|
|
|
- */
|
|
|
expand(zone, page, order, current_order, area,
|
|
|
- is_migrate_cma(migratetype)
|
|
|
- ? migratetype : start_migratetype);
|
|
|
+ new_type);
|
|
|
|
|
|
trace_mm_page_alloc_extfrag(page, order, current_order,
|
|
|
start_migratetype, migratetype, new_type);
|