On Thu, Mar 26, 2026 at 7:43 PM Zi Yan <[email protected]> wrote: > > 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.
Hi Zi, Thank you for tackling this :) Ill try to review the next version as I'm a little behind on this thread. Should we guard collapsing READ_ONLY_THPs with a sysctl? My fear is workloads that convert READ_ONLY THPs into writable pages (assuming this is common/possible; my understanding of FS is rather low), leading to storms of thp splitting. Do you think this is a real concern? I guess this is also true of read-only-->writable fs-THPS even without khugepaged, correct? Cheers, -- Nico > > 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/[email protected]/ [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 >

