mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
mm: add largest_zero_folio() routine
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. Link: https://lkml.kernel.org/r/20250811084113.647267-5-kernel@pankajraghav.com Signed-off-by: David Hildenbrand <david@redhat.com> Signed-off-by: Pankaj Raghav <p.raghav@samsung.com> Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com> Co-developed-by: David Hildenbrand <david@redhat.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Christoph Hellwig <hch@lst.de> Cc: "Darrick J. Wong" <djwong@kernel.org> Cc: Dev Jain <dev.jain@arm.com> Cc: Jens Axboe <axboe@kernel.dk> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Luis Chamberalin <mcgrof@kernel.org> Cc: Mariano Pache <npache@redhat.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: "Ritesh Harjani (IBM)" <ritesh.list@gmail.com> Cc: Ryan Roberts <ryan.roberts@arm.com> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Thomas Gleinxer <tglx@linutronix.de> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Zi Yan <ziy@nvidia.com> Cc: Kiryl Shutsemau <kirill@shutemov.name> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
committed by
Andrew Morton
parent
2d8bd8049e
commit
415a0fd62f
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user