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 3cda95451d93..4ae1294068a8 100644 --- a/mm/compaction.c +++ b/mm/compaction.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/kasan.h> | 19 | #include <linux/kasan.h> |
20 | #include <linux/kthread.h> | 20 | #include <linux/kthread.h> |
21 | #include <linux/freezer.h> | 21 | #include <linux/freezer.h> |
22 | #include <linux/page_owner.h> | ||
22 | #include "internal.h" | 23 | #include "internal.h" |
23 | 24 | ||
24 | #ifdef CONFIG_COMPACTION | 25 | #ifdef CONFIG_COMPACTION |
@@ -79,6 +80,8 @@ static void map_pages(struct list_head *list) | |||
79 | arch_alloc_page(page, order); | 80 | arch_alloc_page(page, order); |
80 | kernel_map_pages(page, nr_pages, 1); | 81 | kernel_map_pages(page, nr_pages, 1); |
81 | kasan_alloc_pages(page, order); | 82 | kasan_alloc_pages(page, order); |
83 | |||
84 | set_page_owner(page, order, __GFP_MOVABLE); | ||
82 | if (order) | 85 | if (order) |
83 | split_page(page, order); | 86 | split_page(page, order); |
84 | 87 | ||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 44cee1e1d65b..f07552fc43e1 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) | |||
2509 | zone->free_area[order].nr_free--; | 2509 | zone->free_area[order].nr_free--; |
2510 | rmv_page_order(page); | 2510 | rmv_page_order(page); |
2511 | 2511 | ||
2512 | set_page_owner(page, order, __GFP_MOVABLE); | ||
2513 | |||
2514 | /* Set the pageblock if the isolated page is at least a pageblock */ | 2512 | /* Set the pageblock if the isolated page is at least a pageblock */ |
2515 | if (order >= pageblock_order - 1) { | 2513 | if (order >= pageblock_order - 1) { |
2516 | struct page *endpage = page + (1 << order) - 1; | 2514 | struct page *endpage = page + (1 << order) - 1; |
diff --git a/mm/page_isolation.c b/mm/page_isolation.c index 612122bf6a42..927f5ee24c87 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c | |||
@@ -7,6 +7,7 @@ | |||
7 | #include <linux/pageblock-flags.h> | 7 | #include <linux/pageblock-flags.h> |
8 | #include <linux/memory.h> | 8 | #include <linux/memory.h> |
9 | #include <linux/hugetlb.h> | 9 | #include <linux/hugetlb.h> |
10 | #include <linux/page_owner.h> | ||
10 | #include "internal.h" | 11 | #include "internal.h" |
11 | 12 | ||
12 | #define CREATE_TRACE_POINTS | 13 | #define CREATE_TRACE_POINTS |
@@ -108,8 +109,6 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype) | |||
108 | if (pfn_valid_within(page_to_pfn(buddy)) && | 109 | if (pfn_valid_within(page_to_pfn(buddy)) && |
109 | !is_migrate_isolate_page(buddy)) { | 110 | !is_migrate_isolate_page(buddy)) { |
110 | __isolate_free_page(page, order); | 111 | __isolate_free_page(page, order); |
111 | kernel_map_pages(page, (1 << order), 1); | ||
112 | set_page_refcounted(page); | ||
113 | isolated_page = page; | 112 | isolated_page = page; |
114 | } | 113 | } |
115 | } | 114 | } |
@@ -128,8 +127,12 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype) | |||
128 | zone->nr_isolate_pageblock--; | 127 | zone->nr_isolate_pageblock--; |
129 | out: | 128 | out: |
130 | spin_unlock_irqrestore(&zone->lock, flags); | 129 | spin_unlock_irqrestore(&zone->lock, flags); |
131 | if (isolated_page) | 130 | if (isolated_page) { |
131 | kernel_map_pages(page, (1 << order), 1); | ||
132 | set_page_refcounted(page); | ||
133 | set_page_owner(page, order, __GFP_MOVABLE); | ||
132 | __free_pages(isolated_page, order); | 134 | __free_pages(isolated_page, order); |
135 | } | ||
133 | } | 136 | } |
134 | 137 | ||
135 | static inline struct page * | 138 | static inline struct page * |