On 2022/9/15 15:26, Oscar Salvador wrote: > On Fri, Sep 09, 2022 at 05:24:43PM +0800, Miaohe Lin wrote: >> In MIGRATE_ISOLATE case, zone freepage state shouldn't be modified as >> caller will take care of it. Add missing is_migrate_isolate() here to >> avoid possible unbalanced freepage state. >> >> Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> > > Ok, I gave it some thought and I guess it's safe to assume that this would happen if > someone isolates the block, and then we face an MCE failure/soft-offline on a page > within that block. > > take_page_off_buddy > break_down_buddy_pages > set_page_guard > > will trigger __mod_zone_freepage_state(), which already had been triggered back > when the block was isolated. > > I think the changelog could grow fatter to better explain the issue. That will be really helpful. Will do it in v2. > > Reviewed-by: Oscar Salvador <osalvador@xxxxxxx> Many thanks for your suggestion and review. Thanks, Miaohe Lin > >> --- >> mm/page_alloc.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/mm/page_alloc.c b/mm/page_alloc.c >> index a35ef385d906..94baf33da865 100644 >> --- a/mm/page_alloc.c >> +++ b/mm/page_alloc.c >> @@ -873,7 +873,8 @@ static inline bool set_page_guard(struct zone *zone, struct page *page, >> INIT_LIST_HEAD(&page->buddy_list); >> set_page_private(page, order); >> /* Guard pages are not available for any usage */ >> - __mod_zone_freepage_state(zone, -(1 << order), migratetype); >> + if (!is_migrate_isolate(migratetype)) >> + __mod_zone_freepage_state(zone, -(1 << order), migratetype); >> >> return true; >> } >> -- >> 2.23.0 >> >