virtiofsd: Check FUSE_SUBMOUNTS
authorMax Reitz <mreitz@redhat.com>
Mon, 2 Nov 2020 16:18:53 +0000 (17:18 +0100)
committerDr. David Alan Gilbert <dgilbert@redhat.com>
Mon, 2 Nov 2020 19:22:06 +0000 (19:22 +0000)
FUSE_SUBMOUNTS is a pure indicator by the kernel to signal that it
supports submounts.  It does not check its state in the init reply, so
there is nothing for fuse_lowlevel.c to do but to check its existence
and copy it into fuse_conn_info.capable.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-Id: <20201102161859.156603-2-mreitz@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
tools/virtiofsd/fuse_common.h
tools/virtiofsd/fuse_lowlevel.c

index 686c42c0a5281f998ee564641195a4b781aa09c0..5aee5193eb29ea10de8e6ce46b63a91d878c3405 100644 (file)
@@ -352,6 +352,13 @@ struct fuse_file_info {
  */
 #define FUSE_CAP_NO_OPENDIR_SUPPORT (1 << 24)
 
+/**
+ * Indicates that the kernel supports the FUSE_ATTR_SUBMOUNT flag.
+ *
+ * Setting (or unsetting) this flag in the `want` field has *no effect*.
+ */
+#define FUSE_CAP_SUBMOUNTS (1 << 27)
+
 /**
  * Ioctl flags
  *
index 4d1ba2925d1bfb9b945ceead5cefe9354dc04c05..370222339ba74ac4241e29db004d41e66c696746 100644 (file)
@@ -1988,6 +1988,9 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid,
             bufsize = max_bufsize;
         }
     }
+    if (arg->flags & FUSE_SUBMOUNTS) {
+        se->conn.capable |= FUSE_CAP_SUBMOUNTS;
+    }
 #ifdef HAVE_SPLICE
 #ifdef HAVE_VMSPLICE
     se->conn.capable |= FUSE_CAP_SPLICE_WRITE | FUSE_CAP_SPLICE_MOVE;