[PATCH v1 00/10] Remove READ_ONLY_THP_FOR_FS Kconfig

From: Zi Yan

Date: Thu Mar 26 2026 - 21:43:55 EST


Hi all,

This patchset removes READ_ONLY_THP_FOR_FS Kconfig and enables creating
read-only THPs for FSes with large folio support (the supported orders
need to include PMD_ORDER) by default.

The changes are:
1. collapse_file() from mm/khugepaged.c, instead of checking
CONFIG_READ_ONLY_THP_FOR_FS, makes sure the mapping_max_folio_order()
of struct address_space of the file is at least PMD_ORDER.
2. file_thp_enabled() also checks mapping_max_folio_order() instead.
3. truncate_inode_partial_folio() calls folio_split() directly instead
of the removed try_folio_split_to_order(), since large folios can
only show up on a FS with large folio support.
4. nr_thps is removed from struct address_space, since it is no longer
needed to drop all read-only THPs from a FS without large folio
support when the fd becomes writable. Its related filemap_nr_thps*()
are removed too.
5. folio_check_splittable() no longer checks READ_ONLY_THP_FOR_FS.
6. Updated comments in various places.

Changelog
===
>From RFC[1]:
1. instead of removing READ_ONLY_THP_FOR_FS function entirely, turn it
on by default for all FSes with large folio support and the supported
orders includes PMD_ORDER.

Suggestions and comments are welcome.

Link: https://lore.kernel.org/all/20260323190644.1714379-1-ziy@xxxxxxxxxx/ [1]

Zi Yan (10):
mm: remove READ_ONLY_THP_FOR_FS Kconfig option
mm/khugepaged: remove READ_ONLY_THP_FOR_FS check
mm: fs: remove filemap_nr_thps*() functions and their users
fs: remove nr_thps from struct address_space
mm/huge_memory: remove READ_ONLY_THP_FOR_FS from file_thp_enabled()
mm/huge_memory: remove folio split check for READ_ONLY_THP_FOR_FS
mm/truncate: use folio_split() in truncate_inode_partial_folio()
fs/btrfs: remove a comment referring to READ_ONLY_THP_FOR_FS
selftests/mm: remove READ_ONLY_THP_FOR_FS in khugepaged
selftests/mm: remove READ_ONLY_THP_FOR_FS from comments in
guard-regions

fs/btrfs/defrag.c | 3 --
fs/inode.c | 3 --
fs/open.c | 27 ----------------
include/linux/fs.h | 5 ---
include/linux/huge_mm.h | 25 ++-------------
include/linux/pagemap.h | 29 -----------------
mm/Kconfig | 11 -------
mm/filemap.c | 1 -
mm/huge_memory.c | 29 ++---------------
mm/khugepaged.c | 36 +++++-----------------
mm/truncate.c | 8 ++---
tools/testing/selftests/mm/guard-regions.c | 9 +++---
tools/testing/selftests/mm/khugepaged.c | 4 +--
13 files changed, 23 insertions(+), 167 deletions(-)

--
2.43.0