[PATCH v6 09/17] mm/huge_memory: rename remap_page() to remap_anon_folio()

From: Kairui Song via B4 Relay

Date: Wed Sep 23 2026 - 17:34:20 EST


From: Kairui Song <kasong@xxxxxxxxxxx>

remap_page() now only has one caller, __folio_freeze_split_anon(),
and is only ever called for anon folios: unmap_folio() currently
leaves file folios unmapped after the split, so they need no
remapping.

Rename it to remap_anon_folio() to make that explicit, and add a
VM_WARN_ON_FOLIO() documenting it.

Reviewed-by: Zi Yan <ziy@xxxxxxxxxx>
Reviewed-by: Kiryl Shutsemau (Meta) <kas@xxxxxxxxxx>
Reviewed-by: Yeoreum Yun <yeoreum.yun@xxxxxxx>
Acked-by: David Hildenbrand (Arm) <david@xxxxxxxxxx>
Signed-off-by: Kairui Song <kasong@xxxxxxxxxxx>
---
mm/huge_memory.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 7ee9eb2e1e93..fa74fada0659 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -3551,7 +3551,6 @@ static void unmap_folio(struct folio *folio)
/*
* Anon pages need migration entries to preserve them, but file
* pages can simply be left unmapped, then faulted back on demand.
- * If that is ever changed (perhaps for mlock), update remap_page().
*/
if (folio_test_anon(folio))
try_to_migrate(folio, ttu_flags);
@@ -3636,10 +3635,17 @@ bool unmap_huge_pmd_locked(struct vm_area_struct *vma, unsigned long addr,
return __discard_anon_folio_pmd_locked(vma, addr, pmdp, folio);
}

-static void remap_page(struct folio *folio, unsigned long nr, int flags)
+static void remap_anon_folio(struct folio *folio, unsigned long nr, int flags)
{
int i = 0;

+ /*
+ * unmap_folio() installs migration entries only for anon folios,
+ * so currently only anon folios need to be remapped. File folios
+ * stay unmapped after the split and are faulted back on demand.
+ */
+ VM_WARN_ON_FOLIO(!folio_test_anon(folio), folio);
+
for (;;) {
remove_migration_ptes(folio, folio, TTU_RMAP_LOCKED | flags);
i += folio_nr_pages(folio);
@@ -3723,7 +3729,7 @@ static void __split_folio_to_order(struct folio *folio, int old_order,
*
* Note that for mapped sub-pages of an anonymous THP,
* PG_anon_exclusive has been cleared in unmap_folio() and is stored in
- * the migration entry instead from where remap_page() will restore it.
+ * the migration entry instead from where remap_anon_folio() will restore it.
* We can still have PG_anon_exclusive set on effectively unmapped and
* unreferenced sub-pages of an anonymous THP: we can simply drop
* PG_anon_exclusive (-> PG_mappedtodisk) for these here.
@@ -4083,7 +4089,7 @@ static int __folio_freeze_split_anon(struct folio *folio,
if (need_remap) {
if (!ret && !folio_is_device_private(folio))
ttu_flags = TTU_USE_SHARED_ZEROPAGE;
- remap_page(folio, 1 << old_order, ttu_flags);
+ remap_anon_folio(folio, 1 << old_order, ttu_flags);
}

return ret;

--
2.55.0