From: Kairui Song 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 --- 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