return 0;
 }
 
-static inline struct folio *page_copy_prealloc(struct mm_struct *src_mm,
-               struct vm_area_struct *vma, unsigned long addr)
+static inline struct folio *folio_prealloc(struct mm_struct *src_mm,
+               struct vm_area_struct *vma, unsigned long addr, bool need_zero)
 {
        struct folio *new_folio;
 
-       new_folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, vma, addr, false);
+       if (need_zero)
+               new_folio = vma_alloc_zeroed_movable_folio(vma, addr);
+       else
+               new_folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, vma,
+                                           addr, false);
+
        if (!new_folio)
                return NULL;
 
        } else if (ret == -EBUSY) {
                goto out;
        } else if (ret ==  -EAGAIN) {
-               prealloc = page_copy_prealloc(src_mm, src_vma, addr);
+               prealloc = folio_prealloc(src_mm, src_vma, addr, false);
                if (!prealloc)
                        return -ENOMEM;
        } else if (ret) {