|
@@ -5414,6 +5414,17 @@ __count_immobile_pages(struct zone *zone, struct page *page, int count)
|
|
|
bool is_pageblock_removable_nolock(struct page *page)
|
|
|
{
|
|
|
struct zone *zone = page_zone(page);
|
|
|
+ unsigned long pfn = page_to_pfn(page);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * We have to be careful here because we are iterating over memory
|
|
|
+ * sections which are not zone aware so we might end up outside of
|
|
|
+ * the zone but still within the section.
|
|
|
+ */
|
|
|
+ if (!zone || zone->zone_start_pfn > pfn ||
|
|
|
+ zone->zone_start_pfn + zone->spanned_pages <= pfn)
|
|
|
+ return false;
|
|
|
+
|
|
|
return __count_immobile_pages(zone, page, 0);
|
|
|
}
|
|
|
|