From: Liam R. Howlett Date: Wed, 29 Oct 2025 19:07:00 +0000 (-0400) Subject: mm/userfaultfd: Change failed_do_unlock() signature to use uffd_info X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=ad764867a7a71b073d50c431068007e8690c09fd;p=users%2Fjedix%2Flinux-maple.git mm/userfaultfd: Change failed_do_unlock() signature to use uffd_info Use uffd_info as it is cleaner. Signed-off-by: Liam R. Howlett --- diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h index 4bf89bde3641..fc4b15b6fc29 100644 --- a/include/linux/userfaultfd_k.h +++ b/include/linux/userfaultfd_k.h @@ -119,9 +119,7 @@ void uffd_complete_register(struct vm_area_struct *vma); /* VMA userfaultfd operations */ unsigned int uffd_page_shift(struct vm_area_struct *vma); int uffd_writeprotect(struct uffd_info *info); -ssize_t uffd_failed_do_unlock(struct userfaultfd_ctx *ctx, - struct vm_area_struct *dst, struct folio *folio, - unsigned long src_addr); +ssize_t uffd_failed_do_unlock(struct uffd_info *info); struct vm_uffd_ops { int (*copy)(struct uffd_info *info); @@ -133,9 +131,7 @@ struct vm_uffd_ops { ssize_t (*is_dst_valid)(struct vm_area_struct *dst_vma, unsigned long dst_start, unsigned long len); unsigned long (*increment)(struct vm_area_struct *vma); - ssize_t (*failed_do_unlock)(struct userfaultfd_ctx *ctx, - struct vm_area_struct *dst, struct folio *folio, - unsigned long src_addr); + ssize_t (*failed_do_unlock)(struct uffd_info *info); unsigned int (*page_shift)(struct vm_area_struct *src_vma); void (*complete_register)(struct vm_area_struct *vma); }; diff --git a/mm/hugetlb.c b/mm/hugetlb.c index d457cb268237..5fcfbaf558b0 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -5513,20 +5513,19 @@ static inline unsigned long hugetlb_mfill_size(struct vm_area_struct *vma) static ssize_t hugetlb_is_dst_valid(struct vm_area_struct *dst_vma, unsigned long dst_start, unsigned long len); -static ssize_t hugetlb_failed_do_unlock(struct userfaultfd_ctx *ctx, - struct vm_area_struct *dst, struct folio *folio, - unsigned long src_addr) +static ssize_t hugetlb_failed_do_unlock(struct uffd_info *info) { - up_read(&ctx->map_changing_lock); + up_read(&info->ctx->map_changing_lock); #ifdef CONFIG_PER_VMA_LOCK - vma_end_read(dst); + vma_end_read(info->dst_vma); #else - mmap_read_unlock(dst->vm_mm); + mmap_read_unlock(info->dst_vma->vm_mm); #endif - VM_WARN_ON_ONCE(!folio); + VM_WARN_ON_ONCE(!info->foliop); - return copy_folio_from_user(folio,(const void __user *)src_addr, true); + return copy_folio_from_user(info->foliop, + (const void __user *)info->src_addr, true); } static inline unsigned int hugetlb_page_shift(struct vm_area_struct *vma) diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c index 4dc6fac27029..0e7a1b05caee 100644 --- a/mm/userfaultfd.c +++ b/mm/userfaultfd.c @@ -499,23 +499,23 @@ static inline const struct vm_uffd_ops *vma_get_uffd_ops(struct vm_area_struct * } inline ssize_t -uffd_failed_do_unlock(struct userfaultfd_ctx *ctx, struct vm_area_struct *dst, - struct folio *folio, unsigned long src_addr) +uffd_failed_do_unlock(struct uffd_info *info) { ssize_t err; void *kaddr; - up_read(&ctx->map_changing_lock); - uffd_mfill_unlock(dst); - VM_WARN_ON_ONCE(!folio); + up_read(&info->ctx->map_changing_lock); + uffd_mfill_unlock(info->dst_vma); + VM_WARN_ON_ONCE(!info->foliop); - kaddr = kmap_local_folio(folio, 0); - err = copy_from_user(kaddr, (const void __user *) src_addr, PAGE_SIZE); + kaddr = kmap_local_folio(info->foliop, 0); + err = copy_from_user(kaddr, (const void __user *) info->src_addr, + PAGE_SIZE); kunmap_local(kaddr); if (unlikely(err)) return -EFAULT; - flush_dcache_folio(folio); + flush_dcache_folio(info->foliop); return 0; } @@ -696,8 +696,7 @@ retry: err = info.op(&info); cond_resched(); if (unlikely(err == -ENOENT)) { - err = info.uffd_ops->failed_do_unlock(ctx, info.dst_vma, - info.foliop, info.src_addr); + err = info.uffd_ops->failed_do_unlock(&info); if (unlikely(err)) goto out;