|
@@ -313,6 +313,19 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone,
|
|
|
} else if (!locked)
|
|
|
spin_lock_irq(&zone->lru_lock);
|
|
|
|
|
|
+ /*
|
|
|
+ * migrate_pfn does not necessarily start aligned to a
|
|
|
+ * pageblock. Ensure that pfn_valid is called when moving
|
|
|
+ * into a new MAX_ORDER_NR_PAGES range in case of large
|
|
|
+ * memory holes within the zone
|
|
|
+ */
|
|
|
+ if ((low_pfn & (MAX_ORDER_NR_PAGES - 1)) == 0) {
|
|
|
+ if (!pfn_valid(low_pfn)) {
|
|
|
+ low_pfn += MAX_ORDER_NR_PAGES - 1;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (!pfn_valid_within(low_pfn))
|
|
|
continue;
|
|
|
nr_scanned++;
|