[PATCH next] mm/migrate: fix remove_migration_pte() of hugetlb entry

From: Hugh Dickins
Date: Sat Feb 26 2022 - 21:29:04 EST


The foliation of remove_migration_pte() is currently wrong on hugetlb
anon entries, causing LTP move_pages12 to crash on BUG_ON(!PageLocked)
in hugepage_add_anon_rmap().

Fixes: b4010e88f071 ("mm/migrate: Convert remove_migration_ptes() to folios")
Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx>
---
Please just fold in if you agree.

mm/migrate.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

--- mmotm/mm/migrate.c
+++ linux/mm/migrate.c
@@ -182,7 +182,8 @@ static bool remove_migration_pte(struct
struct page *new;
unsigned long idx = 0;

- if (!folio_test_ksm(folio))
+ /* Skip call in common case, plus .pgoff is invalid for KSM */
+ if (pvmw.nr_pages != 1 && !folio_test_hugetlb(folio))
idx = linear_page_index(vma, pvmw.address) - pvmw.pgoff;
new = folio_page(folio, idx);