On Tue, Jan 29, 2019 at 1:55 AM Jens Axboe <axboe@xxxxxxxxx> wrote: > On 1/28/19 5:34 PM, Jann Horn wrote: > > On Tue, Jan 29, 2019 at 1:32 AM Jens Axboe <axboe@xxxxxxxxx> wrote: > >> On 1/28/19 5:03 PM, Jens Axboe wrote: > >>>> But you only do that teardown on ->release, right? And ->release > >>>> doesn't have much to do with the process lifetime. > >>> > >>> Yes, only on ->relase(). > >> > >> OK, so I reworked the files struct to just grab it, then we ensure that > >> doesn't go away. For mm, it's a bit more tricky. I think the best > >> solution here is to add a fops->flush() and check for the process > >> exiting its files. If it does, we quiesce the async contexts and prevent > >> further use of that mm. We can't just keep holding a reference to the mm > >> like we do with the files. > >> > >> That should solve both cases. > > > > You still have to hold a reference on the mm though, I think (for > > example, because two tasks might be sharing the fd table without > > sharing the mm). > > Yes good point, except we can't hold a reference to it. Why not? kvm_create_vm() does it, too: mmgrab(current->mm); kvm->mm = current->mm; > But I think > we can get around this by using an mmu notifier instead. That eliminates > the need for ->flush() as well.