struct vm_uffd_ops {
int (*copy)(struct vm_area_struct *dst_vma, unsigned long dst_addr,
- unsigned long src_addr, uffd_flags_t flags,
+ unsigned long src_addr, bool wp,
struct folio **foliop, unsigned long increment);
int (*zeropage)(struct vm_area_struct *dst_vma, unsigned long dst_addr);
int (*cont)(struct vm_area_struct *dst_vma, unsigned long dst_addr,
int mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
unsigned long dst_addr, unsigned long src_addr,
- uffd_flags_t flags, struct folio **foliop,
+ bool wp, struct folio **foliop,
unsigned long increment);
int mfill_atomic_pte_zeropage(struct vm_area_struct *dst_vma,
static int hugetlb_mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
unsigned long dst_addr, unsigned long src_addr,
- uffd_flags_t flags, struct folio **foliop,
+ bool wp_enabled, struct folio **foliop,
unsigned long increment);
static const struct vm_uffd_ops hugetlb_uffd_ops = {
*/
static int hugetlb_mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
unsigned long dst_addr, unsigned long src_addr,
- uffd_flags_t flags, struct folio **foliop,
+ bool wp_enabled, struct folio **foliop,
unsigned long increment)
{
struct mm_struct *dst_mm = dst_vma->vm_mm;
- bool wp_enabled = (flags & MFILL_ATOMIC_WP);
struct hstate *h = hstate_vma(dst_vma);
struct address_space *mapping = dst_vma->vm_file->f_mapping;
pgoff_t idx = vma_hugecache_offset(h, dst_vma, dst_addr);
static int shmem_mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
unsigned long dst_addr, unsigned long src_addr,
- uffd_flags_t flags, struct folio **foliop,
+ bool wp, struct folio **foliop,
unsigned long increment)
{
struct inode *inode = file_inode(dst_vma->vm_file);
int mfill_atomic_pte_copy(struct vm_area_struct *dst_vma,
unsigned long dst_addr, unsigned long src_addr,
- uffd_flags_t flags, struct folio **foliop,
+ bool wp, struct folio **foliop,
unsigned long increment)
{
int ret;
goto out_release;
ret = mfill_atomic_install_pte(dst_pmd, dst_vma, dst_addr,
- &folio->page, true, flags & MFILL_ATOMIC_WP);
+ &folio->page, true, wp);
if (ret)
goto out_release;
out:
err = uffd_ops->cont(dst_vma, dst_addr, flags,
increment);
} else if (uffd_flags_mode_is(flags, MFILL_ATOMIC_COPY)) {
- err = uffd_ops->copy(dst_vma, dst_addr, src_addr, flags,
+ err = uffd_ops->copy(dst_vma, dst_addr, src_addr,
+ flags & MFILL_ATOMIC_WP,
&folio, increment);
/*
* The normal page fault path for a shmem will invoke