> > From: Mike Rapoport <rppt@xxxxxxxxxxxxxxxxxx> > > Check whether a VMA can be used with userfault in more compact way > > Signed-off-by: Mike Rapoport <rppt@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Andrea Arcangeli <aarcange@xxxxxxxxxx> > --- Acked-by: Hillf Danton <hillf.zj@xxxxxxxxxxxxxxx> > fs/userfaultfd.c | 13 +++++++++---- > 1 file changed, 9 insertions(+), 4 deletions(-) > > diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c > index 9552734..387fe77 100644 > --- a/fs/userfaultfd.c > +++ b/fs/userfaultfd.c > @@ -1060,6 +1060,11 @@ static __always_inline int validate_range(struct mm_struct *mm, > return 0; > } > > +static inline bool vma_can_userfault(struct vm_area_struct *vma) > +{ > + return vma_is_anonymous(vma) || is_vm_hugetlb_page(vma); > +} > + > static int userfaultfd_register(struct userfaultfd_ctx *ctx, > unsigned long arg) > { > @@ -1149,7 +1154,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx, > > /* check not compatible vmas */ > ret = -EINVAL; > - if (!vma_is_anonymous(cur) && !is_vm_hugetlb_page(cur)) > + if (!vma_can_userfault(cur)) > goto out_unlock; > /* > * If this vma contains ending address, and huge pages > @@ -1193,7 +1198,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx, > do { > cond_resched(); > > - BUG_ON(!vma_is_anonymous(vma) && !is_vm_hugetlb_page(vma)); > + BUG_ON(!vma_can_userfault(vma)); > BUG_ON(vma->vm_userfaultfd_ctx.ctx && > vma->vm_userfaultfd_ctx.ctx != ctx); > > @@ -1331,7 +1336,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, > * provides for more strict behavior to notice > * unregistration errors. > */ > - if (!vma_is_anonymous(cur) && !is_vm_hugetlb_page(cur)) > + if (!vma_can_userfault(cur)) > goto out_unlock; > > found = true; > @@ -1345,7 +1350,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, > do { > cond_resched(); > > - BUG_ON(!vma_is_anonymous(vma) && !is_vm_hugetlb_page(vma)); > + BUG_ON(!vma_can_userfault(vma)); > > /* > * Nothing to do: this vma is already registered into this > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>