aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mm/compaction.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/mm/compaction.c b/mm/compaction.c
index 0eb9f99196ce..6878c005bc8e 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -526,8 +526,25 @@ isolate_migratepages_range(struct zone *zone, struct compact_control *cc,
526 526
527 /* If isolation recently failed, do not retry */ 527 /* If isolation recently failed, do not retry */
528 pageblock_nr = low_pfn >> pageblock_order; 528 pageblock_nr = low_pfn >> pageblock_order;
529 if (!isolation_suitable(cc, page)) 529 if (last_pageblock_nr != pageblock_nr) {
530 goto next_pageblock; 530 int mt;
531
532 last_pageblock_nr = pageblock_nr;
533 if (!isolation_suitable(cc, page))
534 goto next_pageblock;
535
536 /*
537 * For async migration, also only scan in MOVABLE
538 * blocks. Async migration is optimistic to see if
539 * the minimum amount of work satisfies the allocation
540 */
541 mt = get_pageblock_migratetype(page);
542 if (!cc->sync && !migrate_async_suitable(mt)) {
543 cc->finished_update_migrate = true;
544 skipped_async_unsuitable = true;
545 goto next_pageblock;
546 }
547 }
531 548
532 /* 549 /*
533 * Skip if free. page_order cannot be used without zone->lock 550 * Skip if free. page_order cannot be used without zone->lock
@@ -537,18 +554,6 @@ isolate_migratepages_range(struct zone *zone, struct compact_control *cc,
537 continue; 554 continue;
538 555
539 /* 556 /*
540 * For async migration, also only scan in MOVABLE blocks. Async
541 * migration is optimistic to see if the minimum amount of work
542 * satisfies the allocation
543 */
544 if (!cc->sync && last_pageblock_nr != pageblock_nr &&
545 !migrate_async_suitable(get_pageblock_migratetype(page))) {
546 cc->finished_update_migrate = true;
547 skipped_async_unsuitable = true;
548 goto next_pageblock;
549 }
550
551 /*
552 * Check may be lockless but that's ok as we recheck later. 557 * Check may be lockless but that's ok as we recheck later.
553 * It's possible to migrate LRU pages and balloon pages 558 * It's possible to migrate LRU pages and balloon pages
554 * Skip any other type of page 559 * Skip any other type of page
@@ -639,7 +644,6 @@ check_compact_cluster:
639 644
640next_pageblock: 645next_pageblock:
641 low_pfn = ALIGN(low_pfn + 1, pageblock_nr_pages) - 1; 646 low_pfn = ALIGN(low_pfn + 1, pageblock_nr_pages) - 1;
642 last_pageblock_nr = pageblock_nr;
643 } 647 }
644 648
645 acct_isolated(zone, locked, cc); 649 acct_isolated(zone, locked, cc);