On Fri, Aug 08, 2025 at 02:11:40PM +0200, Pankaj Raghav (Samsung) wrote: > From: Pankaj Raghav <p.raghav@xxxxxxxxxxx> > > The callers of mm_get_huge_zero_folio() have access to a mm struct and > the lifetime of the huge_zero_folio is tied to the lifetime of the mm > struct. > > largest_zero_folio() will give access to huge_zero_folio when > PERSISTENT_HUGE_ZERO_FOLIO config option is enabled for callers that do not > want to tie the lifetime to a mm struct. This is very useful for > filesystem and block layers where the request completions can be async > and there is no guarantee on the mm struct lifetime. > > This function will return a ZERO_PAGE folio if PERSISTENT_HUGE_ZERO_FOLIO > is disabled or if we failed to allocate a huge_zero_folio during early > init. > > Co-developed-by: David Hildenbrand <david@xxxxxxxxxx> > Signed-off-by: David Hildenbrand <david@xxxxxxxxxx> > Signed-off-by: Pankaj Raghav <p.raghav@xxxxxxxxxxx> Hm thought I R-b this already :P LGTM, so: Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> > --- > include/linux/huge_mm.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h > index bd547857c6c1..14d424830fa8 100644 > --- a/include/linux/huge_mm.h > +++ b/include/linux/huge_mm.h > @@ -714,4 +714,26 @@ static inline int split_folio_to_order(struct folio *folio, int new_order) > return split_folio_to_list_to_order(folio, NULL, new_order); > } > > +/** > + * largest_zero_folio - Get the largest zero size folio available > + * > + * This function shall be used when mm_get_huge_zero_folio() cannot be > + * used as there is no appropriate mm lifetime to tie the huge zero folio > + * from the caller. > + * > + * Deduce the size of the folio with folio_size instead of assuming the > + * folio size. > + * > + * Return: pointer to PMD sized zero folio if CONFIG_PERSISTENT_HUGE_ZERO_FOLIO > + * is enabled or a single page sized zero folio > + */ > +static inline struct folio *largest_zero_folio(void) > +{ > + struct folio *folio = get_persistent_huge_zero_folio(); > + > + if (folio) > + return folio; > + > + return page_folio(ZERO_PAGE(0)); > +} > #endif /* _LINUX_HUGE_MM_H */ > -- > 2.49.0 >