[Virtio-fs] [PATCH] fuse: refcount FORGET requests

Vivek Goyal vgoyal at redhat.com
Mon Jun 3 13:13:14 UTC 2019


On Fri, May 31, 2019 at 12:53:57PM -0700, Liu Bo wrote:
> On Fri, May 31, 2019 at 02:59:07PM -0400, Vivek Goyal wrote:
> > On Fri, May 31, 2019 at 11:44:55AM -0700, Liu Bo wrote:
> > > On Fri, May 31, 2019 at 09:22:28AM -0400, Vivek Goyal wrote:
> > > > On Fri, May 31, 2019 at 05:24:03PM +0800, Peng Tao wrote:
> > > > > Right now FORGET requests are not tracked and they might be sent
> > > > > after DESTROY request.
> > > > 
> > > > How does that happen?
> > > >
> > > 
> > > A bit more details, it is those FORGETs that remain in HIGHPRI vq,
> > > sent before DESTROY but not yet processed by daemon before DESTROY
> > > gets back to guest, then they get processed after the 2nd INIT.
> > 
> > I just posted 3 patches to make sure forget request is not sent after
> > destroy. Can you give it a try and see if it solves the problem.
> >
> 
> Sorry, somehow this can only be reproduced on Peng Tao's setup.
> 
> > I also pushed my changes to this branch.
> > 
> > https://github.com/rhvgoyal/linux/commits/flush-forget
> >
> 
> The 2nd mount & INIT can only work after vq->fud is released, and
> 
> virtio_kill_sb
>   fuse_kill_sb_anon
>   virtio_fs_free_devs
>     #release vq->fud
> 
> So it's not necessary to have DESTROY to be the very last one, it only
> matters whether we wait for inflight FORGETS before setting vq->fud to
> NULL.
> 
> Peng's patch seems more fit.

Peng's patch will wait for FORGET requests to complete as well? It might
release vq->fud earlier but that does not matter anyway.

I think key differentiator here is that should generic fuse wait for
FORGET request completion or it should be left to virtio-fs. Given FORGET
command does not expect a reply and genric fuse does not wait for its
completion in general, I chose to limit this behavior in virtio-fs.

Having said that, I am fine with implementing it fuse as well. Miklos's
call.

Vivek




More information about the Virtio-fs mailing list