On Fri, Oct 21, 2022 at 11:41 AM Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> wrote: > > On Fri, 21 Oct 2022 18:16:23 +0800 Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> wrote: > > > When THP migration, if THPs are split and all subpages are migrated successfully > > , the migrate_pages() will still return the number of THP that were not migrated. > > That will confuse the callers of migrate_pages(), for example, which will make > > the longterm pinning failed though all pages are migrated successfully. > > > > Thus we should return 0 to indicate all pages are migrated in this case. > > > > This had me puzzled for a while. I think this wording is clearer? > > : During THP migration, if THPs are not migrated but they are split and all > : subpages are migrated successfully, migrate_pages() will still return the > : number of THP pages that were not migrated. This will confuse the callers > : of migrate_pages(). For example, the longterm pinning will failed though > : all pages are migrated successfully. > : > : Thus we should return 0 to indicate that all pages are migrated in this > : case. > > This is a fairly longstanding problem? No Fixes: we can identify? It doesn't seem like a long standing issue. It seems like commit b5bade978e9b ("mm: migrate: fix the return value of migrate_pages()") fixed one problem, but introduced this new one IIUC. Before this commit, the code did: nr_failed += retry + thp_retry; rc = nr_failed; But retry and thp_retry were actually reset for each retry until the last one. So as long as there is no permanent migration failure and THP split failure, nr_failed should be 0 IIUC. TBH the code is a little bit hard to follow, please correct me if I'm wrong. > > Did you consider the desirability of a -stable backport? >