Use the pghint_t output from alloc_hugetlb_folio_reserve() to skip folio_zero_user() when the page is already zeroed.
Signed-off-by: Michael S. Tsirkin <[email protected]> Assisted-by: Claude:claude-opus-4-6 Assisted-by: cursor-agent:GPT-5.4-xhigh --- mm/memfd.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/mm/memfd.c b/mm/memfd.c index f1c00600e19a..546149897369 100644 --- a/mm/memfd.c +++ b/mm/memfd.c @@ -81,6 +81,7 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff_t idx) struct hstate *h = hstate_file(memfd); int err = -ENOMEM; long nr_resv; + pghint_t hints; gfp_mask = htlb_alloc_mask(h); gfp_mask &= ~(__GFP_HIGHMEM | __GFP_MOVABLE); @@ -93,17 +94,12 @@ struct folio *memfd_alloc_folio(struct file *memfd, pgoff_t idx) folio = alloc_hugetlb_folio_reserve(h, numa_node_id(), NULL, - gfp_mask, NULL); + gfp_mask, &hints); if (folio) { u32 hash; - /* - * Zero the folio to prevent information leaks to userspace. - * Use folio_zero_user() which is optimized for huge/gigantic - * pages. Pass 0 as addr_hint since this is not a faulting path - * and we don't have a user virtual address yet. - */ - folio_zero_user(folio, 0); + if (!(hints & PGHINT_ZEROED)) + folio_zero_user(folio, 0); /* * Mark the folio uptodate before adding to page cache, -- MST

