Messages in this thread | | | Date | Tue, 31 Jan 2017 16:41:32 -0800 | From | Andrew Morton <> | Subject | Re: [PATCH v2 3/5] userfaultfd: non-cooperative: add event for exit() notification |
| |
On Fri, 27 Jan 2017 20:44:31 +0200 Mike Rapoport <rppt@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?
| |