On Mon, 17 Jun 2024 10:39:25 -0400 Zi Yan <zi.yan@xxxxxxxx> wrote: > From: Zi Yan <ziy@xxxxxxxxxx> > > Both Hugh Dickins and kernel test bot hit an issue that migrate_pages() > reports success but still leaves unmigrated pages on from list. It > triggers BUG_ON in migrate_misplaced_folio() and compact_zone(). > > Our convention is that if migrate_pages() reports complete success (0), > then the migratepages list will be empty; but if it reports an error or > some pages remaining, then its caller must putback_movable_pages(). > > There's a new case in which migrate_pages() has been reporting complete > success, but returning with pages left on the migratepages list: when > migrate_pages_batch() successfully split a folio on the deferred list, > but then the "Failure isn't counted" call does not dispose of them all. > > Since that block is expecting the large folio to have been counted as 1 > failure already, and since the return code is later adjusted to success > whenever the returned list is found empty, the simple way to fix this > safely is to count splitting the deferred folio as "a failure". > > This patch is based on Hugh's fix and suggestions from Huang, Ying. > I have just sent Hugh's version in to Linus. So if/when that is merged, please send along any needed updates.