diff --git a/mm/migrate.c b/mm/migrate.c index 5e4c3f2f7532..2522829f6c19 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1758,7 +1758,12 @@ static int migrate_pages_batch(struct list_head *from, /* * The rare folio on the deferred split list should - * be split now. It should not count as a failure. + * be split now. It should not count as a failure: + * but increment nr_failed because, without doing so, + * migrate_pages() may report success with (split but + * unmigrated) pages still on its fromlist; whereas it + * always reports success when its fromlist is empty. + * * Only check it without removing it from the list. * Since the folio can be on deferred_split_scan() * local list and removing it can cause the local list @@ -1773,6 +1778,7 @@ static int migrate_pages_batch(struct list_head *from, if (nr_pages > 2 && !list_empty(&folio->_deferred_list)) { if (try_split_folio(folio, split_folios, reason) == 0) { + nr_failed++; stats->nr_thp_split += is_thp; continue; }