diff options
-rw-r--r-- | mm/compaction.c | 3 | ||||
-rw-r--r-- | mm/page_alloc.c | 2 | ||||
-rw-r--r-- | mm/page_isolation.c | 9 |
3 files changed, 9 insertions, 5 deletions
diff --git a/mm/compaction.c b/mm/compaction.c index 3cda954..4ae1294 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -19,6 +19,7 @@ #include <linux/kasan.h> #include <linux/kthread.h> #include <linux/freezer.h> +#include <linux/page_owner.h> #include "internal.h" #ifdef CONFIG_COMPACTION @@ -79,6 +80,8 @@ static void map_pages(struct list_head *list) arch_alloc_page(page, order); kernel_map_pages(page, nr_pages, 1); kasan_alloc_pages(page, order); + + 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 44cee1e..f07552f 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2509,8 +2509,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 612122b..927f5ee 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c @@ -7,6 +7,7 @@ #include <linux/pageblock-flags.h> #include <linux/memory.h> #include <linux/hugetlb.h> +#include <linux/page_owner.h> #include "internal.h" #define CREATE_TRACE_POINTS @@ -108,8 +109,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); - kernel_map_pages(page, (1 << order), 1); - set_page_refcounted(page); isolated_page = page; } } @@ -128,8 +127,12 @@ 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) { + 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 * |