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(-)
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@nvidia.com/ [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
On 3/27/26 02:42, Zi Yan 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. > > 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. Hi! :) The patch set might be better structured by 1) Teaching code paths to not only respect READ_ONLY_THP_FOR_FS but also filesystems with large folios. At that point, READ_ONLY_THP_FOR_FS would have no effect. 2) Removing READ_ONLY_THP_FOR_FS along with all the old cruft that is no longer required MADV_COLLAPSE will keep working the whole time. -- Cheers, David
On Fri, Mar 27, 2026 at 02:46:43PM +0100, David Hildenbrand (Arm) wrote: > On 3/27/26 02:42, Zi Yan 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. > > > > 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. > > Hi! :) > > The patch set might be better structured by > > 1) Teaching code paths to not only respect READ_ONLY_THP_FOR_FS but also > filesystems with large folios. At that point, READ_ONLY_THP_FOR_FS would > have no effect. And also please do some cleaning up of the mess we have in the code base if at all possible :) I feel like we're constantly building on sand with this, and should treat every major change as a chance to do this. Or otherwise we constantly keep leaving this mess around to deal with... > > 2) Removing READ_ONLY_THP_FOR_FS along with all the old cruft that is no > longer required > > MADV_COLLAPSE will keep working the whole time. Obviously everything should keep working throughout any version of this series. > > -- > Cheers, > > David Cheers, Lorenzo
On 27 Mar 2026, at 10:27, Lorenzo Stoakes (Oracle) wrote: > On Fri, Mar 27, 2026 at 02:46:43PM +0100, David Hildenbrand (Arm) wrote: >> On 3/27/26 02:42, Zi Yan 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. >>> >>> 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. >> >> Hi! :) >> >> The patch set might be better structured by >> >> 1) Teaching code paths to not only respect READ_ONLY_THP_FOR_FS but also >> filesystems with large folios. At that point, READ_ONLY_THP_FOR_FS would >> have no effect. > > And also please do some cleaning up of the mess we have in the code base if at > all possible :) I feel like we're constantly building on sand with this, and > should treat every major change as a chance to do this. > > Or otherwise we constantly keep leaving this mess around to deal with... Got it. Let me read through feedbacks from individual patches and come up with a plan. > >> >> 2) Removing READ_ONLY_THP_FOR_FS along with all the old cruft that is no >> longer required >> >> MADV_COLLAPSE will keep working the whole time. > > Obviously everything should keep working throughout any version of this series. > Ack. Best Regards, Yan, Zi
On 27 Mar 2026, at 9:46, David Hildenbrand (Arm) wrote: > On 3/27/26 02:42, Zi Yan 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. >> >> 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. > > Hi! :) > > The patch set might be better structured by > > 1) Teaching code paths to not only respect READ_ONLY_THP_FOR_FS but also > filesystems with large folios. At that point, READ_ONLY_THP_FOR_FS would > have no effect. > > 2) Removing READ_ONLY_THP_FOR_FS along with all the old cruft that is no > longer required > > MADV_COLLAPSE will keep working the whole time. OK. I will give this a try. Best Regards, Yan, Zi
© 2016 - 2026 Red Hat, Inc.