On Mon, Nov 13, 2023 at 11:22:21PM +0800, Kefeng Wang wrote: > Use folio_prealloc() helper to simplify code a bit. Reviewed-by: Vishal Moola (Oracle) <vishal.moola@xxxxxxxxx> > Signed-off-by: Kefeng Wang <wangkefeng.wang@xxxxxxxxxx> > --- > mm/memory.c | 22 +++++++--------------- > 1 file changed, 7 insertions(+), 15 deletions(-) > > diff --git a/mm/memory.c b/mm/memory.c > index f350ab2a324f..03226566bf8e 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -3114,6 +3114,7 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) > int page_copied = 0; > struct mmu_notifier_range range; > vm_fault_t ret; > + bool pfn_is_zero; > > delayacct_wpcopy_start(); > > @@ -3123,16 +3124,13 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) > if (unlikely(ret)) > goto out; > > - if (is_zero_pfn(pte_pfn(vmf->orig_pte))) { > - new_folio = vma_alloc_zeroed_movable_folio(vma, vmf->address); > - if (!new_folio) > - goto oom; > - } else { > + pfn_is_zero = is_zero_pfn(pte_pfn(vmf->orig_pte)); > + new_folio = folio_prealloc(mm, vma, vmf->address, pfn_is_zero); > + if (!new_folio) > + goto oom; > + > + if (!pfn_is_zero) { > int err; > - new_folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, vma, > - vmf->address, false); > - if (!new_folio) > - goto oom; > > err = __wp_page_copy_user(&new_folio->page, vmf->page, vmf); > if (err) { > @@ -3153,10 +3151,6 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) > kmsan_copy_page_meta(&new_folio->page, vmf->page); > } > > - if (mem_cgroup_charge(new_folio, mm, GFP_KERNEL)) > - goto oom_free_new; > - folio_throttle_swaprate(new_folio, GFP_KERNEL); > - > __folio_mark_uptodate(new_folio); > > mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, > @@ -3255,8 +3249,6 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) > > delayacct_wpcopy_end(); > return 0; > -oom_free_new: > - folio_put(new_folio); > oom: > ret = VM_FAULT_OOM; > out: > -- > 2.27.0