Messages in this thread Patch in this message | | | From | Muchun Song <> | Subject | [PATCH v2] mm/page_isolation: do not isolate the max order page | Date | Fri, 4 Dec 2020 00:22:37 +0800 |
| |
The max order page has no buddy page and never merge to other order. So isolating and then freeing it is pointless. And if order == MAX_ORDER - 1, then the buddy can actually be a !pfn_valid() in some corner case? pfn_valid_within(buddy_pfn) that follows would only catch it on archs with holes in zone. Then is_migrate_isolate_page(buddy) might access an invalid buddy. So this is also a bug fix.
Fixes: 3c605096d315 ("mm/page_alloc: restrict max order of merging on isolated pageblock") Signed-off-by: Muchun Song <songmuchun@bytedance.com> Acked-by: Vlastimil Babka <vbabka@suse.cz> --- Changes in v2: - Add Fixes tag in the commit log.
mm/page_isolation.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/mm/page_isolation.c b/mm/page_isolation.c index a254e1f370a3..bddf788f45bf 100644 --- a/mm/page_isolation.c +++ b/mm/page_isolation.c @@ -88,7 +88,7 @@ static void unset_migratetype_isolate(struct page *page, unsigned migratetype) */ if (PageBuddy(page)) { order = buddy_order(page); - if (order >= pageblock_order) { + if (order >= pageblock_order && order < MAX_ORDER - 1) { pfn = page_to_pfn(page); buddy_pfn = __find_buddy_pfn(pfn, order); buddy = page + (buddy_pfn - pfn); -- 2.11.0
| |