On Sun, 7 Nov 2021 16:57:26 +0800 Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> wrote: > Correct the migration stats for hugetlb with using compound_nr() instead > of thp_nr_pages(), It would be helpful to explain why using thp_nr_pages() was wrong. And to explain the end user visible effects of this bug so we can decide whether -stable backporting is desirable. > meanwhile change 'nr_failed_pages' to record the > number of normal pages failed to migrate, including THP and hugetlb, > and 'nr_succeeded' will record the number of normal pages migrated > successfully. > > Reviewed-by: Zi Yan <ziy@xxxxxxxxxx> > Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> > --- > mm/migrate.c | 17 ++++++++--------- > 1 file changed, 8 insertions(+), 9 deletions(-) > > diff --git a/mm/migrate.c b/mm/migrate.c > index 9aafdab..756190b 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -1436,9 +1436,9 @@ static inline int try_split_thp(struct page *page, struct page **page2, > * It is caller's responsibility to call putback_movable_pages() to return pages > * to the LRU or free list only if ret != 0. > * > - * Returns the number of {normal page, THP} that were not migrated, or an error code. > - * The number of THP splits will be considered as the number of non-migrated THP, > - * no matter how many subpages of the THP are migrated successfully. > + * Returns the number of {normal page, THP, hugetlb} that were not migrated, or This is a bit confusing. If migrate_pages() failed to migrate one 4k pages then it returns 1, yes? But if migrate_pages() fails to migrate one 2MB hugepage then will it return 1 or will it return 512? And how can the caller actually _use_ this return value without knowing the above information? In other words, perhaps this function should simply return pass/fail?