aboutsummaryrefslogtreecommitdiffstats
path: root/mm/compaction.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/compaction.c')
-rw-r--r--mm/compaction.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/mm/compaction.c b/mm/compaction.c
index ee20fc044b91..d9d7b35d3933 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -127,6 +127,16 @@ static bool suitable_migration_target(struct page *page)
127 return false; 127 return false;
128} 128}
129 129
130static void map_pages(struct list_head *list)
131{
132 struct page *page;
133
134 list_for_each_entry(page, list, lru) {
135 arch_alloc_page(page, 0);
136 kernel_map_pages(page, 1, 1);
137 }
138}
139
130/* 140/*
131 * Based on information in the current compact_control, find blocks 141 * Based on information in the current compact_control, find blocks
132 * suitable for isolating free pages from and then isolate them. 142 * suitable for isolating free pages from and then isolate them.
@@ -206,10 +216,7 @@ static void isolate_freepages(struct zone *zone,
206 } 216 }
207 217
208 /* split_free_page does not map the pages */ 218 /* split_free_page does not map the pages */
209 list_for_each_entry(page, freelist, lru) { 219 map_pages(freelist);
210 arch_alloc_page(page, 0);
211 kernel_map_pages(page, 1, 1);
212 }
213 220
214 cc->free_pfn = high_pfn; 221 cc->free_pfn = high_pfn;
215 cc->nr_freepages = nr_freepages; 222 cc->nr_freepages = nr_freepages;