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