[Virtio-fs] Deleting files when using NFS as a shared folder
Max Reitz
mreitz at redhat.com
Mon Aug 2 16:34:17 UTC 2021
On 02.08.21 13:30, Gal Hammer wrote:
>
>
> On Mon, 2 Aug 2021 at 13:49, Max Reitz <mreitz at redhat.com
> <mailto:mreitz at redhat.com>> wrote:
>
> On 02.08.21 12:44, Gal Hammer wrote:
> >
> >
> > On Mon, 2 Aug 2021 at 13:36, Dr. David Alan Gilbert
> > <dgilbert at redhat.com <mailto:dgilbert at redhat.com>
> <mailto:dgilbert at redhat.com <mailto:dgilbert at redhat.com>>> wrote:
> >
> > * Gal Hammer (ghammer at redhat.com <mailto:ghammer at redhat.com>
> <mailto:ghammer at redhat.com <mailto:ghammer at redhat.com>>) wrote:
> > > Hello,
> > >
> > > When using NFS as a shared folder (mount type nfs4) with a
> Linux
> > guest I
> > > have the following issue:
> > >
> > > Guest:
> > > $ ls -la /mnt/shared
> > > total 8
> > > drwxr-xrwx. 2 135 135 4096 Aug 2 13:08 .
> > > dr-xr-xr-x. 17 root root 224 May 23 10:58 ..
> > > -rw-r--rw-. 1 135 135 27 Aug 2 13:07 readme.txt
> > >
> > > Host:
> > > $ rm readme.txt
> > >
> > > Guest:
> > > $ ls -la /mnt/shared
> > > total 8
> > > drwxr-xrwx. 2 135 135 4096 Aug 2 13:10 .
> > > dr-xr-xr-x. 17 root root 224 May 23 10:58 ..
> > > -rw-r--rw-. 1 135 135 27 Aug 2 13:07
> > .nfs0000000001b600d000000005
> > >
> > > Guest:
> > > $ cat /mnt/shared/readme.txt
> > > This is a readme.txt file.
> > >
> > > So it seems that the virtiofsd has a reference to the file
> which
> > the guest
> > > is not aware of and is unable to send a FUSE_FORGET message.
> > This results
> > > in a file not actually deleted (renamed to .nfsXXX) and is
> still
> > accessible
> > > by the guest.
> > >
> > > I have a similar problem when deleting a file from a Windows
> > guest side.
> > > The FUSE_READDIR(PLUS) commands add a reference count to files
> > which the OS
> > > doesn't have a file context for. However I was able to
> solve it
> > (for now?)
> > > by keeping track of returned files' inodes.
> > >
> > > Is this behaviour current and by design?
> >
> > Current problem, not really by design; the problem is the
> O_PATH files
> > that we have open for the inodes. I thought if the guest
> sent the
> > forget for the file then it got closed.
> >
> >
> > So if I understand then sending forget message for each inode
> returned
> > by readdir won't solve the problem because you need the open
> files for
> > inodes?
>
> virtiofsd internally keeps an lo_inode object for every inode that
> has
> been looked up at some point, and every such lo_inode contains an
> O_PATH
> fd referencing that inode. I don’t know by heart what the conditions
> for dropping those lo_inode objects are.
>
>
> I think it depends on the guest's forget message.
Yes, it looks like it.
> However, once it’s possible to use file handles to reference inodes
> instead of O_PATH fds (already in virtiofsd-rs, for virtiofsd there’s
> this series:
> https://listman.redhat.com/archives/virtio-fs/2021-July/msg00050.html
> <https://listman.redhat.com/archives/virtio-fs/2021-July/msg00050.html>),
>
> then giving the appropriate options (-o inode_file_handles -o
> modcaps=+dac_read_search) should result in no O_PATH fds being kept
> around anymore, so that deleting an inode on the host will result
> in the
> inode being truly deleted (unless the guest still has it open).
>
>
> Will the guest will still need to send forget messages with this new
> feature?
I don’t think so. With file handles, FDs should only be opened (and
kept open) when the guest actually opens some file. (Aside from
temporary O_PATH FDs e.g. during a lookup.)
Max
>
> But with O_PATH fds, it’s kind of by design, I would say.
>
>
> Thanks for the clarification.
>
> Gal.
>
>
> Max
>
More information about the Virtio-fs
mailing list