diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f32fae3121f07461f846911ee6963ce679828780..0d520dce6aeaca13c1c9456c3bbe89770468dc3d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -693,6 +693,9 @@ int move_freepages(struct zone *zone, #endif for (page = start_page; page <= end_page;) { + /* Make sure we are not inadvertently changing nodes */ + VM_BUG_ON(page_to_nid(page) != zone_to_nid(zone)); + if (!pfn_valid_within(page_to_pfn(page))) { page++; continue; @@ -2475,6 +2478,10 @@ static void setup_zone_migrate_reserve(struct zone *zone) continue; page = pfn_to_page(pfn); + /* Watch out for overlapping nodes */ + if (page_to_nid(page) != zone_to_nid(zone)) + continue; + /* Blocks with reserved pages will never free, skip them. */ if (PageReserved(page)) continue;