Large folios in the page cache depend on the splitting infrastructure from
THP. To remove the dependency between large folios and
CONFIG_TRANSPARENT_HUGEPAGE, set the min order == max order if THP is
disabled. This will make sure the splitting code will not be required
when THP is disabled, therefore, removing the dependency between large
folios and THP.
Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
---
include/linux/pagemap.h | 17 ++++++-----------
1 file changed, 6 insertions(+), 11 deletions(-)
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 09b581c1d878..1bb0d4432d4b 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -397,9 +397,7 @@ static inline void mapping_set_gfp_mask(struct address_space *m, gfp_t mask)
*/
static inline size_t mapping_max_folio_size_supported(void)
{
- if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
- return 1U << (PAGE_SHIFT + MAX_PAGECACHE_ORDER);
- return PAGE_SIZE;
+ return 1U << (PAGE_SHIFT + MAX_PAGECACHE_ORDER);
}
/*
@@ -422,16 +420,17 @@ static inline void mapping_set_folio_order_range(struct address_space *mapping,
unsigned int min,
unsigned int max)
{
- if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
- return;
-
if (min > MAX_PAGECACHE_ORDER)
min = MAX_PAGECACHE_ORDER;
if (max > MAX_PAGECACHE_ORDER)
max = MAX_PAGECACHE_ORDER;
- if (max < min)
+ /* Large folios depend on THP infrastructure for splitting.
+ * If THP is disabled, we cap the max order to min order to avoid
+ * splitting the folios.
+ */
+ if ((max < min) || !IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
max = min;
mapping->flags = (mapping->flags & ~AS_FOLIO_ORDER_MASK) |
@@ -463,16 +462,12 @@ static inline void mapping_set_large_folios(struct address_space *mapping)
static inline unsigned int
mapping_max_folio_order(const struct address_space *mapping)
{
- if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
- return 0;
return (mapping->flags & AS_FOLIO_ORDER_MAX_MASK) >> AS_FOLIO_ORDER_MAX;
}
static inline unsigned int
mapping_min_folio_order(const struct address_space *mapping)
{
- if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
- return 0;
return (mapping->flags & AS_FOLIO_ORDER_MIN_MASK) >> AS_FOLIO_ORDER_MIN;
}
--
2.50.1
On 12/6/25 04:08, Pankaj Raghav wrote: > Large folios in the page cache depend on the splitting infrastructure from > THP. To remove the dependency between large folios and > CONFIG_TRANSPARENT_HUGEPAGE, set the min order == max order if THP is > disabled. This will make sure the splitting code will not be required > when THP is disabled, therefore, removing the dependency between large > folios and THP. > The description is actually misleading. It's not that you remove the dependency from THP for large folios _in general_ (the CONFIG_THP is retained in this patch). Rather you remove the dependency for large folios _for the block layer_. And that should be make explicit in the description, otherwise the description and the patch doesn't match. Cheers, Hannes -- Dr. Hannes Reinecke Kernel Storage Architect hare@suse.de +49 911 74053 688 SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich
On 12/9/25 13:15, Hannes Reinecke wrote: > On 12/6/25 04:08, Pankaj Raghav wrote: >> Large folios in the page cache depend on the splitting infrastructure from >> THP. To remove the dependency between large folios and >> CONFIG_TRANSPARENT_HUGEPAGE, set the min order == max order if THP is >> disabled. This will make sure the splitting code will not be required >> when THP is disabled, therefore, removing the dependency between large >> folios and THP. >> > The description is actually misleading. > It's not that you remove the dependency from THP for large folios > _in general_ (the CONFIG_THP is retained in this patch). > Rather you remove the dependency for large folios _for the block layer_. > And that should be make explicit in the description, otherwise the > description and the patch doesn't match. > Hmm, that is not what I am doing. This has nothing to do with the block layer directly. I mentioned this in the cover letter but I can reiterate it again. Large folios depended on THP infrastructure when it was introduced. When we added added LBS support to the block layer, we introduced an indirect dependency on CONFIG_THP. When we disabled config_THP and had a block device logical block size > page size, we ran into a panic. That was fixed here[1]. If this patch is upstreamed, then we can disable THP but still have a LBS drive attached without any issues. Baolin added another CONFIG_THP block in ext4 [2]. With this support, we don't need to sprinkle THP where file backed large folios are used. Happy to discuss this in LPC (if you are attending)! [1] https://lore.kernel.org/all/20250704092134.289491-1-p.raghav@samsung.com/ [2] https://lwn.net/ml/all/20251121090654.631996-25-libaokun@huaweicloud.com/ -- Pankaj
On 12/9/25 17:33, Pankaj Raghav wrote: > On 12/9/25 13:15, Hannes Reinecke wrote: >> On 12/6/25 04:08, Pankaj Raghav wrote: >>> Large folios in the page cache depend on the splitting infrastructure from >>> THP. To remove the dependency between large folios and >>> CONFIG_TRANSPARENT_HUGEPAGE, set the min order == max order if THP is >>> disabled. This will make sure the splitting code will not be required >>> when THP is disabled, therefore, removing the dependency between large >>> folios and THP. >>> >> The description is actually misleading. >> It's not that you remove the dependency from THP for large folios >> _in general_ (the CONFIG_THP is retained in this patch). >> Rather you remove the dependency for large folios _for the block layer_. >> And that should be make explicit in the description, otherwise the >> description and the patch doesn't match. >> > > Hmm, that is not what I am doing. This has nothing to do with the block layer directly. > I mentioned this in the cover letter but I can reiterate it again. > > Large folios depended on THP infrastructure when it was introduced. When we added added LBS support > to the block layer, we introduced an indirect dependency on CONFIG_THP. When we disabled config_THP > and had a block device logical block size > page size, we ran into a panic. > > That was fixed here[1]. > Yes, and no. That patch limited the maximum blocksize without THP to 4k, so effectively disabling LBS. > If this patch is upstreamed, then we can disable THP but still have a LBS drive attached without any > issues. > But this is what I meant. We do _not_ disable the dependency on THP for LBS, we just remove checks for the config option itself in the block layer code. The actual dependency on THP will remain as LBS will only be supported if THP is enabled. > Baolin added another CONFIG_THP block in ext4 [2]. With this support, we don't need to sprinkle THP > where file backed large folios are used. > > Happy to discuss this in LPC (if you are attending)! > The very first presentation on the first day in the CXL track. Yes :-) Let's discuss there; would love to figure out if we cannot remove the actual dependency on THP, too. Cheers, Hannes -- Dr. Hannes Reinecke Kernel Storage Architect hare@suse.de +49 911 74053 688 SUSE Software Solutions GmbH, Frankenstr. 146, 90461 Nürnberg HRB 36809 (AG Nürnberg), GF: I. Totev, A. McDonald, W. Knoblich
© 2016 - 2025 Red Hat, Inc.