On Fri, 27 Jan 2017 20:44:31 +0200 Mike Rapoport <r...@linux.vnet.ibm.com> wrote:
> Allow userfaultfd monitor track termination of the processes that have > memory backed by the uffd. > > --- a/fs/userfaultfd.c > +++ b/fs/userfaultfd.c > @@ -774,6 +774,30 @@ void userfaultfd_unmap_complete(struct mm_struct *mm, > struct list_head *uf) > } > } > > +void userfaultfd_exit(struct mm_struct *mm) > +{ > + struct vm_area_struct *vma = mm->mmap; > + > + while (vma) { > + struct userfaultfd_ctx *ctx = vma->vm_userfaultfd_ctx.ctx; > + > + if (ctx && (ctx->features & UFFD_FEATURE_EVENT_EXIT)) { > + struct userfaultfd_wait_queue ewq; > + > + userfaultfd_ctx_get(ctx); > + > + msg_init(&ewq.msg); > + ewq.msg.event = UFFD_EVENT_EXIT; > + > + userfaultfd_event_wait_completion(ctx, &ewq); > + > + ctx->features &= ~UFFD_FEATURE_EVENT_EXIT; > + } > + > + vma = vma->vm_next; > + } > +} And we can do the vma walk without locking because the caller (exit_mm) knows it now has exclusive access. Worth a comment?