[PATCH 0/3] mm: allow freezing mappings

From: Pratyush Yadav

Date: Tue Oct 27 2026 - 13:31:20 EST


From: "Pratyush Yadav (Google)" <pratyush@xxxxxxxxxx>

Hi,

This series allows freezing the mapping of an inode. The main user is
memfd_luo. It serializes the state of the mapping and needs to make sure
it does not go out of sync. Currently it does so via a combination of
pinning and internal flags. But this functionality will be used by
HugeTLB and guest_memfd preservation in the future, so this series makes
the feature generic.

The idea came from David Hildenbrand during my presentation on HugeTLB
preservation at LSF/MM/BPF this year. He originally suggested putting it
in the VFS layer, but I find the page cache to be the appropriate layer
for this, since it is the i_pages that memfd_luo serializes.

Patch 1 is a cleanup that also came as a suggestion from David. It is
useful for this series since the freezing change exposes a race with
shmem_writeout(), and this patch fixes this, along with other
improvements including preservation performance. It can be taken
independent of this series, but for now I am including it here.

Patch 2 is the main one. It adds AS_FROZEN, and adds helpers to set it,
and adds checks in filemap core.

Patch 3 updates shmem and memfd_luo to use AS_FROZEN.

My local sashiko has complained about some more minor things, but this
is my first foray into the page cache and I am not even sure this is the
right approach to begin with. So I'd much rather find out early if this
is the wrong approach.

The series is based on mm-unstable. It has a minor merge conflict with
liveupdate/next, but I can fix that up after the merge window. I see
this mainly as a MM change, so I think this should go through the MM
tree.

Regards,
Pratyush Yadav

Pratyush Yadav (Google) (3):
mm/memfd_luo: don't use memfd_pin_folios()
mm: allow freezing i_pages
mm: shmem: use mapping_set_frozen() for memfd preservation

fs/inode.c | 9 ++
include/linux/pagemap.h | 35 +++++
include/linux/shmem_fs.h | 17 ---
mm/filemap.c | 7 +
mm/huge_memory.c | 10 ++
mm/khugepaged.c | 12 ++
mm/memfd_luo.c | 291 +++++++++++++++++++++++----------------
mm/migrate.c | 14 +-
mm/shmem.c | 34 +++--
mm/truncate.c | 16 ++-
mm/vmscan.c | 3 +
11 files changed, 302 insertions(+), 146 deletions(-)


base-commit: 39274b454e9993cea319f4ac342a8082a9ee1730
--
2.56.0.307.g5fe7bd680c-goog