|
@@ -729,6 +729,7 @@ static void __free_pages_ok(struct page *page, unsigned int order)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
int wasMlocked = __TestClearPageMlocked(page);
|
|
|
+ int migratetype;
|
|
|
|
|
|
if (!free_pages_prepare(page, order))
|
|
|
return;
|
|
@@ -737,8 +738,9 @@ static void __free_pages_ok(struct page *page, unsigned int order)
|
|
|
if (unlikely(wasMlocked))
|
|
|
free_page_mlock(page);
|
|
|
__count_vm_events(PGFREE, 1 << order);
|
|
|
- free_one_page(page_zone(page), page, order,
|
|
|
- get_pageblock_migratetype(page));
|
|
|
+ migratetype = get_pageblock_migratetype(page);
|
|
|
+ set_freepage_migratetype(page, migratetype);
|
|
|
+ free_one_page(page_zone(page), page, order, migratetype);
|
|
|
local_irq_restore(flags);
|
|
|
}
|
|
|
|
|
@@ -959,6 +961,7 @@ static int move_freepages(struct zone *zone,
|
|
|
order = page_order(page);
|
|
|
list_move(&page->lru,
|
|
|
&zone->free_area[order].free_list[migratetype]);
|
|
|
+ set_freepage_migratetype(page, migratetype);
|
|
|
page += 1 << order;
|
|
|
pages_moved += 1 << order;
|
|
|
}
|