diff options
Diffstat (limited to 'mm/page_isolation.c')
-rw-r--r-- | mm/page_isolation.c | 9 |
1 files changed, 6 insertions, 3 deletions
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 * |