aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/compaction.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/mm/compaction.c b/mm/compaction.c
index 585de54dbe8c..56fa3216a6b4 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -200,7 +200,8 @@ static void reset_cached_positions(struct zone *zone)
200{ 200{
201 zone->compact_cached_migrate_pfn[0] = zone->zone_start_pfn; 201 zone->compact_cached_migrate_pfn[0] = zone->zone_start_pfn;
202 zone->compact_cached_migrate_pfn[1] = zone->zone_start_pfn; 202 zone->compact_cached_migrate_pfn[1] = zone->zone_start_pfn;
203 zone->compact_cached_free_pfn = zone_end_pfn(zone); 203 zone->compact_cached_free_pfn =
204 round_down(zone_end_pfn(zone) - 1, pageblock_nr_pages);
204} 205}
205 206
206/* 207/*
@@ -1371,11 +1372,11 @@ static int compact_zone(struct zone *zone, struct compact_control *cc)
1371 */ 1372 */
1372 cc->migrate_pfn = zone->compact_cached_migrate_pfn[sync]; 1373 cc->migrate_pfn = zone->compact_cached_migrate_pfn[sync];
1373 cc->free_pfn = zone->compact_cached_free_pfn; 1374 cc->free_pfn = zone->compact_cached_free_pfn;
1374 if (cc->free_pfn < start_pfn || cc->free_pfn > end_pfn) { 1375 if (cc->free_pfn < start_pfn || cc->free_pfn >= end_pfn) {
1375 cc->free_pfn = end_pfn & ~(pageblock_nr_pages-1); 1376 cc->free_pfn = round_down(end_pfn - 1, pageblock_nr_pages);
1376 zone->compact_cached_free_pfn = cc->free_pfn; 1377 zone->compact_cached_free_pfn = cc->free_pfn;
1377 } 1378 }
1378 if (cc->migrate_pfn < start_pfn || cc->migrate_pfn > end_pfn) { 1379 if (cc->migrate_pfn < start_pfn || cc->migrate_pfn >= end_pfn) {
1379 cc->migrate_pfn = start_pfn; 1380 cc->migrate_pfn = start_pfn;
1380 zone->compact_cached_migrate_pfn[0] = cc->migrate_pfn; 1381 zone->compact_cached_migrate_pfn[0] = cc->migrate_pfn;
1381 zone->compact_cached_migrate_pfn[1] = cc->migrate_pfn; 1382 zone->compact_cached_migrate_pfn[1] = cc->migrate_pfn;