On 29 Oct 2021, at 3:42, Baolin Wang wrote: > Now hugetlb migration is also available for some scenarios, such as > soft offling or memory compaction. So we should correct the migration hugetlb migration is available at the time if (PageHuge(page)) branch is added. I am not sure what is new here. > stats for hugetlb with using compound_nr() instead of thp_nr_pages() > to get the number of pages. nr_failed records the number of pages, not subpages. It is returned to user space when move_pages() syscall is used. After your change, if users try to migrate a list of pages including THPs and/or hugetlb pages and some of THPs and/or hugetlb fail to migrate, move_pages() will return a number larger than the number of pages the users tried to migrate. I am not sure this is the change we want. Or at least, the comment of migrate_pages() and the manpage of move_pages() need to be changed and linux-api mailing list should be cc’d. > > Signed-off-by: Baolin Wang <baolin.wang@xxxxxxxxxxxxxxxxx> > --- > mm/migrate.c | 10 ++++------ > 1 file changed, 4 insertions(+), 6 deletions(-) > > diff --git a/mm/migrate.c b/mm/migrate.c > index a11e948..2b45a29 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -1475,7 +1475,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, > * during migration. > */ > is_thp = PageTransHuge(page) && !PageHuge(page); > - nr_subpages = thp_nr_pages(page); > + nr_subpages = compound_nr(page); > cond_resched(); > > if (PageHuge(page)) > @@ -1540,7 +1540,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, > nr_failed += nr_subpages; > goto out; > } > - nr_failed++; > + nr_failed += nr_subpages; > goto out; > case -EAGAIN: > if (is_thp) { > @@ -1550,14 +1550,14 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, > retry++; > break; > case MIGRATEPAGE_SUCCESS: > + nr_succeeded += nr_subpages; > if (is_thp) { > nr_thp_succeeded++; > - nr_succeeded += nr_subpages; > break; > } > - nr_succeeded++; > break; > default: > + nr_failed += nr_subpages; > /* > * Permanent failure (-EBUSY, etc.): > * unlike -EAGAIN case, the failed page is > @@ -1566,10 +1566,8 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, > */ > if (is_thp) { > nr_thp_failed++; > - nr_failed += nr_subpages; > break; > } > - nr_failed++; > break; > } > } > -- > 1.8.3.1 -- Best Regards, Yan, Zi
Attachment:
signature.asc
Description: OpenPGP digital signature