On 02.11.20 20:56, Dr. David Alan Gilbert (git) wrote: > From: Max Reitz <mre...@redhat.com> > > Whenever we encounter a directory with an st_dev or mount ID that > differs from that of its parent, we set the FUSE_ATTR_SUBMOUNT flag so > the guest can create a submount for it. > > We only need to do so in lo_do_lookup(). The following functions return > a fuse_attr object: > - lo_create(), though fuse_reply_create(): Calls lo_do_lookup(). > - lo_lookup(), though fuse_reply_entry(): Calls lo_do_lookup(). > - lo_mknod_symlink(), through fuse_reply_entry(): Calls lo_do_lookup(). > - lo_link(), through fuse_reply_entry(): Creating a link cannot create a > submount, so there is no need to check for it. > - lo_getattr(), through fuse_reply_attr(): Announcing submounts when the > node is first detected (at lookup) is sufficient. We do not need to > return the submount attribute later. > - lo_do_readdir(), through fuse_add_direntry_plus(): Calls > lo_do_lookup(). > > Make announcing submounts optional, so submounts are only announced to > the guest with the announce_submounts option. Some users may prefer the > current behavior, so that the guest learns nothing about the host mount > structure. > > (announce_submounts is force-disabled when the guest does not present > the FUSE_SUBMOUNTS capability, or when there is no statx().) > > Signed-off-by: Max Reitz <mre...@redhat.com> > Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com> > Message-Id: <20201102161859.156603-6-mre...@redhat.com> > Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> > --- > tools/virtiofsd/helper.c | 1 + > tools/virtiofsd/passthrough_ll.c | 22 ++++++++++++++++++++++ > 2 files changed, 23 insertions(+)
> diff --git a/tools/virtiofsd/passthrough_ll.c > b/tools/virtiofsd/passthrough_ll.c [...] > index 34d107975f..ec1008bceb 100644 > --- a/tools/virtiofsd/passthrough_ll.c > +++ b/tools/virtiofsd/passthrough_ll.c [...] > @@ -601,6 +604,20 @@ static void lo_init(void *userdata, struct > fuse_conn_info *conn) [...] > +#ifndef CONFIG_STATX > + if (lo->announce_submounts) { > + fuse_log(FUSE_LOG_WARNING, "lo_init: Cannot announce submounts, > there " > + "is no statx()\n"); > + lo->announce_submounts = false; > + } > +#endif When reviewing this series, Miklos noted today that this warning is wrong (we can still announce submounts even without statx()), and we concluded that we should probably drop it and the “lo->announce_submounts = false” assignment (i.e. this whole block). I don’t think that needs to stop this pull request, though, we can easily fix it on top. Max