aboutsummaryrefslogtreecommitdiffstats
path: root/mm/page_isolation.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page_isolation.c')
-rw-r--r--mm/page_isolation.c9
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--;
129out: 128out:
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
135static inline struct page * 138static inline struct page *