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


Reply via email to