diff --git a/mm/compaction.c b/mm/compaction.c index 8c0c3a77d1b4..1af10625f5d5 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -19,6 +19,7 @@ #include #include #include +#include #include "internal.h" #ifdef CONFIG_COMPACTION @@ -74,6 +75,8 @@ static void map_pages(struct list_head *list) kasan_alloc_pages(page, order); arch_alloc_page(page, order); kernel_map_pages(page, nr_pages, 1); + + set_page_owner(page, order, __GFP_MOVABLE); if (order) split_page(page, order); diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 96060d3c53d9..a3a66237c8b6 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2281,8 +2281,6 @@ int __isolate_free_page(struct page *page, unsigned int order) zone->free_area[order].nr_free--; rmv_page_order(page); - set_page_owner(page, order, __GFP_MOVABLE); - /* Set the pageblock if the isolated page is at least a pageblock */ if (order >= pageblock_order - 1) { struct page *endpage = page + (1 << order) - 1; diff --git a/mm/page_isolation.c b/mm/page_isolation.c index 3ecd3807c2c2..978b955ef470 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c @@ -8,6 +8,7 @@ #include #include #include +#include #include "internal.h" static int set_migratetype_isolate(struct page *page, @@ -106,10 +107,6 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype) if (pfn_valid_within(page_to_pfn(buddy)) && !is_migrate_isolate_page(buddy)) { __isolate_free_page(page, order); - kasan_alloc_pages(page, order); - arch_alloc_page(page, order); - kernel_map_pages(page, (1 << order), 1); - set_page_refcounted(page); isolated_page = page; } } @@ -128,8 +125,14 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype) zone->nr_isolate_pageblock--; out: spin_unlock_irqrestore(&zone->lock, flags); - if (isolated_page) + if (isolated_page) { + kasan_alloc_pages(page, order); + arch_alloc_page(page, order); + kernel_map_pages(page, (1 << order), 1); + set_page_refcounted(page); + set_page_owner(page, order, __GFP_MOVABLE); __free_pages(isolated_page, order); + } } static inline struct page *