[PATCH v4 09/17] mm/huge_memory: rename remap_page() to remap_folio()

From: Kairui Song via B4 Relay

Date: Mon Sep 07 2026 - 14:12:51 EST


From: Kairui Song <kasong@xxxxxxxxxxx>

remap_page() now only has one caller, __folio_freeze_split_anon(), so
rename it to remap_folio() to match the sibling helper unmap_folio().

Also add a VM_WARN_ON_FOLIO() documenting that remap_folio() is only
ever called for anon folios: unmap_folio() currently leaves file
folios unmapped after the split, so they need no remapping.

Signed-off-by: Kairui Song <kasong@xxxxxxxxxxx>
---
mm/huge_memory.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index 7d7ce0726c19..c5279c0d0e59 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -3551,7 +3551,7 @@ 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 that is ever changed (perhaps for mlock), update remap_folio().
*/
if (folio_test_anon(folio))
try_to_migrate(folio, ttu_flags);
@@ -3636,10 +3636,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_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 +3730,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_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.
@@ -4064,7 +4071,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_folio(folio, 1 << old_order, ttu_flags);
}

return ret;
@@ -4186,7 +4193,7 @@ static int __folio_freeze_split_file(struct folio *folio,
fail:
/*
* If we want to use try_to_migrate() on file in unmap_folio,
- * remember to add remap_page() and adapt it.
+ * remember to add remap_folio() and adapt it.
*/
xas_unlock_irq(xas);
if (nr_shmem_dropped)

--
2.55.0