All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org, stefanha@redhat.com
Subject: [PULL 013/108] virtiofsd: Trim out compatibility code
Date: Thu, 23 Jan 2020 16:44:55 +0000	[thread overview]
Message-ID: <20200123164630.91498-14-dgilbert@redhat.com> (raw)
In-Reply-To: <20200123164630.91498-1-dgilbert@redhat.com>

From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>

virtiofsd only supports major=7, minor>=31; trim out a lot of
old compatibility code.

Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
 tools/virtiofsd/fuse_lowlevel.c | 330 ++++++++++++--------------------
 1 file changed, 119 insertions(+), 211 deletions(-)

diff --git a/tools/virtiofsd/fuse_lowlevel.c b/tools/virtiofsd/fuse_lowlevel.c
index 07fb8a6095..514d79cb24 100644
--- a/tools/virtiofsd/fuse_lowlevel.c
+++ b/tools/virtiofsd/fuse_lowlevel.c
@@ -387,16 +387,7 @@ static void fill_open(struct fuse_open_out *arg, const struct fuse_file_info *f)
 int fuse_reply_entry(fuse_req_t req, const struct fuse_entry_param *e)
 {
     struct fuse_entry_out arg;
-    size_t size = req->se->conn.proto_minor < 9 ? FUSE_COMPAT_ENTRY_OUT_SIZE :
-                                                  sizeof(arg);
-
-    /*
-     * before ABI 7.4 e->ino == 0 was invalid, only ENOENT meant
-     * negative entry
-     */
-    if (!e->ino && req->se->conn.proto_minor < 4) {
-        return fuse_reply_err(req, ENOENT);
-    }
+    size_t size = sizeof(arg);
 
     memset(&arg, 0, sizeof(arg));
     fill_entry(&arg, e);
@@ -407,9 +398,7 @@ int fuse_reply_create(fuse_req_t req, const struct fuse_entry_param *e,
                       const struct fuse_file_info *f)
 {
     char buf[sizeof(struct fuse_entry_out) + sizeof(struct fuse_open_out)];
-    size_t entrysize = req->se->conn.proto_minor < 9 ?
-                           FUSE_COMPAT_ENTRY_OUT_SIZE :
-                           sizeof(struct fuse_entry_out);
+    size_t entrysize = sizeof(struct fuse_entry_out);
     struct fuse_entry_out *earg = (struct fuse_entry_out *)buf;
     struct fuse_open_out *oarg = (struct fuse_open_out *)(buf + entrysize);
 
@@ -423,8 +412,7 @@ int fuse_reply_attr(fuse_req_t req, const struct stat *attr,
                     double attr_timeout)
 {
     struct fuse_attr_out arg;
-    size_t size =
-        req->se->conn.proto_minor < 9 ? FUSE_COMPAT_ATTR_OUT_SIZE : sizeof(arg);
+    size_t size = sizeof(arg);
 
     memset(&arg, 0, sizeof(arg));
     arg.attr_valid = calc_timeout_sec(attr_timeout);
@@ -519,8 +507,7 @@ int fuse_reply_data(fuse_req_t req, struct fuse_bufvec *bufv)
 int fuse_reply_statfs(fuse_req_t req, const struct statvfs *stbuf)
 {
     struct fuse_statfs_out arg;
-    size_t size =
-        req->se->conn.proto_minor < 4 ? FUSE_COMPAT_STATFS_SIZE : sizeof(arg);
+    size_t size = sizeof(arg);
 
     memset(&arg, 0, sizeof(arg));
     convert_statfs(stbuf, &arg.st);
@@ -604,45 +591,31 @@ int fuse_reply_ioctl_retry(fuse_req_t req, const struct iovec *in_iov,
     iov[count].iov_len = sizeof(arg);
     count++;
 
-    if (req->se->conn.proto_minor < 16) {
-        if (in_count) {
-            iov[count].iov_base = (void *)in_iov;
-            iov[count].iov_len = sizeof(in_iov[0]) * in_count;
-            count++;
-        }
+    /* Can't handle non-compat 64bit ioctls on 32bit */
+    if (sizeof(void *) == 4 && req->ioctl_64bit) {
+        res = fuse_reply_err(req, EINVAL);
+        goto out;
+    }
 
-        if (out_count) {
-            iov[count].iov_base = (void *)out_iov;
-            iov[count].iov_len = sizeof(out_iov[0]) * out_count;
-            count++;
+    if (in_count) {
+        in_fiov = fuse_ioctl_iovec_copy(in_iov, in_count);
+        if (!in_fiov) {
+            goto enomem;
         }
-    } else {
-        /* Can't handle non-compat 64bit ioctls on 32bit */
-        if (sizeof(void *) == 4 && req->ioctl_64bit) {
-            res = fuse_reply_err(req, EINVAL);
-            goto out;
-        }
-
-        if (in_count) {
-            in_fiov = fuse_ioctl_iovec_copy(in_iov, in_count);
-            if (!in_fiov) {
-                goto enomem;
-            }
 
-            iov[count].iov_base = (void *)in_fiov;
-            iov[count].iov_len = sizeof(in_fiov[0]) * in_count;
-            count++;
+        iov[count].iov_base = (void *)in_fiov;
+        iov[count].iov_len = sizeof(in_fiov[0]) * in_count;
+        count++;
+    }
+    if (out_count) {
+        out_fiov = fuse_ioctl_iovec_copy(out_iov, out_count);
+        if (!out_fiov) {
+            goto enomem;
         }
-        if (out_count) {
-            out_fiov = fuse_ioctl_iovec_copy(out_iov, out_count);
-            if (!out_fiov) {
-                goto enomem;
-            }
 
-            iov[count].iov_base = (void *)out_fiov;
-            iov[count].iov_len = sizeof(out_fiov[0]) * out_count;
-            count++;
-        }
+        iov[count].iov_base = (void *)out_fiov;
+        iov[count].iov_len = sizeof(out_fiov[0]) * out_count;
+        count++;
     }
 
     res = send_reply_iov(req, 0, iov, count);
@@ -784,14 +757,12 @@ static void do_getattr(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     struct fuse_file_info *fip = NULL;
     struct fuse_file_info fi;
 
-    if (req->se->conn.proto_minor >= 9) {
-        struct fuse_getattr_in *arg = (struct fuse_getattr_in *)inarg;
+    struct fuse_getattr_in *arg = (struct fuse_getattr_in *)inarg;
 
-        if (arg->getattr_flags & FUSE_GETATTR_FH) {
-            memset(&fi, 0, sizeof(fi));
-            fi.fh = arg->fh;
-            fip = &fi;
-        }
+    if (arg->getattr_flags & FUSE_GETATTR_FH) {
+        memset(&fi, 0, sizeof(fi));
+        fi.fh = arg->fh;
+        fip = &fi;
     }
 
     if (req->se->op.getattr) {
@@ -856,11 +827,7 @@ static void do_mknod(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     struct fuse_mknod_in *arg = (struct fuse_mknod_in *)inarg;
     char *name = PARAM(arg);
 
-    if (req->se->conn.proto_minor >= 12) {
-        req->ctx.umask = arg->umask;
-    } else {
-        name = (char *)inarg + FUSE_COMPAT_MKNOD_IN_SIZE;
-    }
+    req->ctx.umask = arg->umask;
 
     if (req->se->op.mknod) {
         req->se->op.mknod(req, nodeid, name, arg->mode, arg->rdev);
@@ -873,9 +840,7 @@ static void do_mkdir(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
 {
     struct fuse_mkdir_in *arg = (struct fuse_mkdir_in *)inarg;
 
-    if (req->se->conn.proto_minor >= 12) {
-        req->ctx.umask = arg->umask;
-    }
+    req->ctx.umask = arg->umask;
 
     if (req->se->op.mkdir) {
         req->se->op.mkdir(req, nodeid, PARAM(arg), arg->mode);
@@ -967,11 +932,7 @@ static void do_create(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
         memset(&fi, 0, sizeof(fi));
         fi.flags = arg->flags;
 
-        if (req->se->conn.proto_minor >= 12) {
-            req->ctx.umask = arg->umask;
-        } else {
-            name = (char *)inarg + sizeof(struct fuse_open_in);
-        }
+        req->ctx.umask = arg->umask;
 
         req->se->op.create(req, nodeid, name, arg->mode, &fi);
     } else {
@@ -1003,10 +964,8 @@ static void do_read(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
 
         memset(&fi, 0, sizeof(fi));
         fi.fh = arg->fh;
-        if (req->se->conn.proto_minor >= 9) {
-            fi.lock_owner = arg->lock_owner;
-            fi.flags = arg->flags;
-        }
+        fi.lock_owner = arg->lock_owner;
+        fi.flags = arg->flags;
         req->se->op.read(req, nodeid, arg->size, arg->offset, &fi);
     } else {
         fuse_reply_err(req, ENOSYS);
@@ -1023,13 +982,9 @@ static void do_write(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     fi.fh = arg->fh;
     fi.writepage = (arg->write_flags & FUSE_WRITE_CACHE) != 0;
 
-    if (req->se->conn.proto_minor < 9) {
-        param = ((char *)arg) + FUSE_COMPAT_WRITE_IN_SIZE;
-    } else {
-        fi.lock_owner = arg->lock_owner;
-        fi.flags = arg->flags;
-        param = PARAM(arg);
-    }
+    fi.lock_owner = arg->lock_owner;
+    fi.flags = arg->flags;
+    param = PARAM(arg);
 
     if (req->se->op.write) {
         req->se->op.write(req, nodeid, param, arg->size, arg->offset, &fi);
@@ -1053,21 +1008,14 @@ static void do_write_buf(fuse_req_t req, fuse_ino_t nodeid, const void *inarg,
     fi.fh = arg->fh;
     fi.writepage = arg->write_flags & FUSE_WRITE_CACHE;
 
-    if (se->conn.proto_minor < 9) {
-        bufv.buf[0].mem = ((char *)arg) + FUSE_COMPAT_WRITE_IN_SIZE;
-        bufv.buf[0].size -=
-            sizeof(struct fuse_in_header) + FUSE_COMPAT_WRITE_IN_SIZE;
-        assert(!(bufv.buf[0].flags & FUSE_BUF_IS_FD));
-    } else {
-        fi.lock_owner = arg->lock_owner;
-        fi.flags = arg->flags;
-        if (!(bufv.buf[0].flags & FUSE_BUF_IS_FD)) {
-            bufv.buf[0].mem = PARAM(arg);
-        }
-
-        bufv.buf[0].size -=
-            sizeof(struct fuse_in_header) + sizeof(struct fuse_write_in);
+    fi.lock_owner = arg->lock_owner;
+    fi.flags = arg->flags;
+    if (!(bufv.buf[0].flags & FUSE_BUF_IS_FD)) {
+        bufv.buf[0].mem = PARAM(arg);
     }
+
+    bufv.buf[0].size -=
+        sizeof(struct fuse_in_header) + sizeof(struct fuse_write_in);
     if (bufv.buf[0].size < arg->size) {
         fuse_log(FUSE_LOG_ERR, "fuse: do_write_buf: buffer size too small\n");
         fuse_reply_err(req, EIO);
@@ -1086,9 +1034,7 @@ static void do_flush(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     memset(&fi, 0, sizeof(fi));
     fi.fh = arg->fh;
     fi.flush = 1;
-    if (req->se->conn.proto_minor >= 7) {
-        fi.lock_owner = arg->lock_owner;
-    }
+    fi.lock_owner = arg->lock_owner;
 
     if (req->se->op.flush) {
         req->se->op.flush(req, nodeid, &fi);
@@ -1105,10 +1051,8 @@ static void do_release(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     memset(&fi, 0, sizeof(fi));
     fi.flags = arg->flags;
     fi.fh = arg->fh;
-    if (req->se->conn.proto_minor >= 8) {
-        fi.flush = (arg->release_flags & FUSE_RELEASE_FLUSH) ? 1 : 0;
-        fi.lock_owner = arg->lock_owner;
-    }
+    fi.flush = (arg->release_flags & FUSE_RELEASE_FLUSH) ? 1 : 0;
+    fi.lock_owner = arg->lock_owner;
     if (arg->release_flags & FUSE_RELEASE_FLOCK_UNLOCK) {
         fi.flock_release = 1;
         fi.lock_owner = arg->lock_owner;
@@ -1477,8 +1421,7 @@ static void do_ioctl(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     memset(&fi, 0, sizeof(fi));
     fi.fh = arg->fh;
 
-    if (sizeof(void *) == 4 && req->se->conn.proto_minor >= 16 &&
-        !(flags & FUSE_IOCTL_32BIT)) {
+    if (sizeof(void *) == 4 && !(flags & FUSE_IOCTL_32BIT)) {
         req->ioctl_64bit = 1;
     }
 
@@ -1603,7 +1546,7 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     outarg.major = FUSE_KERNEL_VERSION;
     outarg.minor = FUSE_KERNEL_MINOR_VERSION;
 
-    if (arg->major < 7) {
+    if (arg->major < 7 || (arg->major == 7 && arg->minor < 31)) {
         fuse_log(FUSE_LOG_ERR, "fuse: unsupported protocol version: %u.%u\n",
                  arg->major, arg->minor);
         fuse_reply_err(req, EPROTO);
@@ -1616,81 +1559,71 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
         return;
     }
 
-    if (arg->minor >= 6) {
-        if (arg->max_readahead < se->conn.max_readahead) {
-            se->conn.max_readahead = arg->max_readahead;
-        }
-        if (arg->flags & FUSE_ASYNC_READ) {
-            se->conn.capable |= FUSE_CAP_ASYNC_READ;
-        }
-        if (arg->flags & FUSE_POSIX_LOCKS) {
-            se->conn.capable |= FUSE_CAP_POSIX_LOCKS;
-        }
-        if (arg->flags & FUSE_ATOMIC_O_TRUNC) {
-            se->conn.capable |= FUSE_CAP_ATOMIC_O_TRUNC;
-        }
-        if (arg->flags & FUSE_EXPORT_SUPPORT) {
-            se->conn.capable |= FUSE_CAP_EXPORT_SUPPORT;
-        }
-        if (arg->flags & FUSE_DONT_MASK) {
-            se->conn.capable |= FUSE_CAP_DONT_MASK;
-        }
-        if (arg->flags & FUSE_FLOCK_LOCKS) {
-            se->conn.capable |= FUSE_CAP_FLOCK_LOCKS;
-        }
-        if (arg->flags & FUSE_AUTO_INVAL_DATA) {
-            se->conn.capable |= FUSE_CAP_AUTO_INVAL_DATA;
-        }
-        if (arg->flags & FUSE_DO_READDIRPLUS) {
-            se->conn.capable |= FUSE_CAP_READDIRPLUS;
-        }
-        if (arg->flags & FUSE_READDIRPLUS_AUTO) {
-            se->conn.capable |= FUSE_CAP_READDIRPLUS_AUTO;
-        }
-        if (arg->flags & FUSE_ASYNC_DIO) {
-            se->conn.capable |= FUSE_CAP_ASYNC_DIO;
-        }
-        if (arg->flags & FUSE_WRITEBACK_CACHE) {
-            se->conn.capable |= FUSE_CAP_WRITEBACK_CACHE;
-        }
-        if (arg->flags & FUSE_NO_OPEN_SUPPORT) {
-            se->conn.capable |= FUSE_CAP_NO_OPEN_SUPPORT;
-        }
-        if (arg->flags & FUSE_PARALLEL_DIROPS) {
-            se->conn.capable |= FUSE_CAP_PARALLEL_DIROPS;
-        }
-        if (arg->flags & FUSE_POSIX_ACL) {
-            se->conn.capable |= FUSE_CAP_POSIX_ACL;
-        }
-        if (arg->flags & FUSE_HANDLE_KILLPRIV) {
-            se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV;
-        }
-        if (arg->flags & FUSE_NO_OPENDIR_SUPPORT) {
-            se->conn.capable |= FUSE_CAP_NO_OPENDIR_SUPPORT;
-        }
-        if (!(arg->flags & FUSE_MAX_PAGES)) {
-            size_t max_bufsize =
-                FUSE_DEFAULT_MAX_PAGES_PER_REQ * getpagesize() +
-                FUSE_BUFFER_HEADER_SIZE;
-            if (bufsize > max_bufsize) {
-                bufsize = max_bufsize;
-            }
+    if (arg->max_readahead < se->conn.max_readahead) {
+        se->conn.max_readahead = arg->max_readahead;
+    }
+    if (arg->flags & FUSE_ASYNC_READ) {
+        se->conn.capable |= FUSE_CAP_ASYNC_READ;
+    }
+    if (arg->flags & FUSE_POSIX_LOCKS) {
+        se->conn.capable |= FUSE_CAP_POSIX_LOCKS;
+    }
+    if (arg->flags & FUSE_ATOMIC_O_TRUNC) {
+        se->conn.capable |= FUSE_CAP_ATOMIC_O_TRUNC;
+    }
+    if (arg->flags & FUSE_EXPORT_SUPPORT) {
+        se->conn.capable |= FUSE_CAP_EXPORT_SUPPORT;
+    }
+    if (arg->flags & FUSE_DONT_MASK) {
+        se->conn.capable |= FUSE_CAP_DONT_MASK;
+    }
+    if (arg->flags & FUSE_FLOCK_LOCKS) {
+        se->conn.capable |= FUSE_CAP_FLOCK_LOCKS;
+    }
+    if (arg->flags & FUSE_AUTO_INVAL_DATA) {
+        se->conn.capable |= FUSE_CAP_AUTO_INVAL_DATA;
+    }
+    if (arg->flags & FUSE_DO_READDIRPLUS) {
+        se->conn.capable |= FUSE_CAP_READDIRPLUS;
+    }
+    if (arg->flags & FUSE_READDIRPLUS_AUTO) {
+        se->conn.capable |= FUSE_CAP_READDIRPLUS_AUTO;
+    }
+    if (arg->flags & FUSE_ASYNC_DIO) {
+        se->conn.capable |= FUSE_CAP_ASYNC_DIO;
+    }
+    if (arg->flags & FUSE_WRITEBACK_CACHE) {
+        se->conn.capable |= FUSE_CAP_WRITEBACK_CACHE;
+    }
+    if (arg->flags & FUSE_NO_OPEN_SUPPORT) {
+        se->conn.capable |= FUSE_CAP_NO_OPEN_SUPPORT;
+    }
+    if (arg->flags & FUSE_PARALLEL_DIROPS) {
+        se->conn.capable |= FUSE_CAP_PARALLEL_DIROPS;
+    }
+    if (arg->flags & FUSE_POSIX_ACL) {
+        se->conn.capable |= FUSE_CAP_POSIX_ACL;
+    }
+    if (arg->flags & FUSE_HANDLE_KILLPRIV) {
+        se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV;
+    }
+    if (arg->flags & FUSE_NO_OPENDIR_SUPPORT) {
+        se->conn.capable |= FUSE_CAP_NO_OPENDIR_SUPPORT;
+    }
+    if (!(arg->flags & FUSE_MAX_PAGES)) {
+        size_t max_bufsize = FUSE_DEFAULT_MAX_PAGES_PER_REQ * getpagesize() +
+                             FUSE_BUFFER_HEADER_SIZE;
+        if (bufsize > max_bufsize) {
+            bufsize = max_bufsize;
         }
-    } else {
-        se->conn.max_readahead = 0;
     }
-
-    if (se->conn.proto_minor >= 14) {
 #ifdef HAVE_SPLICE
 #ifdef HAVE_VMSPLICE
-        se->conn.capable |= FUSE_CAP_SPLICE_WRITE | FUSE_CAP_SPLICE_MOVE;
+    se->conn.capable |= FUSE_CAP_SPLICE_WRITE | FUSE_CAP_SPLICE_MOVE;
 #endif
-        se->conn.capable |= FUSE_CAP_SPLICE_READ;
+    se->conn.capable |= FUSE_CAP_SPLICE_READ;
 #endif
-    }
-    if (se->conn.proto_minor >= 18) {
-        se->conn.capable |= FUSE_CAP_IOCTL_DIR;
-    }
+    se->conn.capable |= FUSE_CAP_IOCTL_DIR;
 
     /*
      * Default settings for modern filesystems.
@@ -1797,24 +1730,20 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
     }
     outarg.max_readahead = se->conn.max_readahead;
     outarg.max_write = se->conn.max_write;
-    if (se->conn.proto_minor >= 13) {
-        if (se->conn.max_background >= (1 << 16)) {
-            se->conn.max_background = (1 << 16) - 1;
-        }
-        if (se->conn.congestion_threshold > se->conn.max_background) {
-            se->conn.congestion_threshold = se->conn.max_background;
-        }
-        if (!se->conn.congestion_threshold) {
-            se->conn.congestion_threshold = se->conn.max_background * 3 / 4;
-        }
-
-        outarg.max_background = se->conn.max_background;
-        outarg.congestion_threshold = se->conn.congestion_threshold;
+    if (se->conn.max_background >= (1 << 16)) {
+        se->conn.max_background = (1 << 16) - 1;
+    }
+    if (se->conn.congestion_threshold > se->conn.max_background) {
+        se->conn.congestion_threshold = se->conn.max_background;
     }
-    if (se->conn.proto_minor >= 23) {
-        outarg.time_gran = se->conn.time_gran;
+    if (!se->conn.congestion_threshold) {
+        se->conn.congestion_threshold = se->conn.max_background * 3 / 4;
     }
 
+    outarg.max_background = se->conn.max_background;
+    outarg.congestion_threshold = se->conn.congestion_threshold;
+    outarg.time_gran = se->conn.time_gran;
+
     if (se->debug) {
         fuse_log(FUSE_LOG_DEBUG, "   INIT: %u.%u\n", outarg.major,
                  outarg.minor);
@@ -1828,11 +1757,6 @@ static void do_init(fuse_req_t req, fuse_ino_t nodeid, const void *inarg)
                  outarg.congestion_threshold);
         fuse_log(FUSE_LOG_DEBUG, "   time_gran=%u\n", outarg.time_gran);
     }
-    if (arg->minor < 5) {
-        outargsize = FUSE_COMPAT_INIT_OUT_SIZE;
-    } else if (arg->minor < 23) {
-        outargsize = FUSE_COMPAT_22_INIT_OUT_SIZE;
-    }
 
     send_reply_ok(req, &outarg, outargsize);
 }
@@ -1896,10 +1820,6 @@ int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino,
         return -EINVAL;
     }
 
-    if (se->conn.proto_major < 6 || se->conn.proto_minor < 12) {
-        return -ENOSYS;
-    }
-
     outarg.ino = ino;
     outarg.off = off;
     outarg.len = len;
@@ -1920,10 +1840,6 @@ int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent,
         return -EINVAL;
     }
 
-    if (se->conn.proto_major < 6 || se->conn.proto_minor < 12) {
-        return -ENOSYS;
-    }
-
     outarg.parent = parent;
     outarg.namelen = namelen;
     outarg.padding = 0;
@@ -1947,10 +1863,6 @@ int fuse_lowlevel_notify_delete(struct fuse_session *se, fuse_ino_t parent,
         return -EINVAL;
     }
 
-    if (se->conn.proto_major < 6 || se->conn.proto_minor < 18) {
-        return -ENOSYS;
-    }
-
     outarg.parent = parent;
     outarg.child = child;
     outarg.namelen = namelen;
@@ -1977,10 +1889,6 @@ int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino,
         return -EINVAL;
     }
 
-    if (se->conn.proto_major < 6 || se->conn.proto_minor < 15) {
-        return -ENOSYS;
-    }
-
     out.unique = 0;
     out.error = FUSE_NOTIFY_STORE;
 
-- 
2.24.1



  parent reply	other threads:[~2020-01-23 18:20 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-23 16:44 [PULL 000/108] virtiofs queue Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 001/108] virtiofsd: Pull in upstream headers Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 002/108] virtiofsd: Pull in kernel's fuse.h Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 003/108] virtiofsd: Add auxiliary .c's Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 004/108] virtiofsd: Add fuse_lowlevel.c Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 005/108] virtiofsd: Add passthrough_ll Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 006/108] virtiofsd: Trim down imported files Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 007/108] virtiofsd: Format imported files to qemu style Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 008/108] virtiofsd: remove mountpoint dummy argument Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 009/108] virtiofsd: remove unused notify reply support Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 010/108] virtiofsd: Remove unused enum fuse_buf_copy_flags Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 011/108] virtiofsd: Fix fuse_daemonize ignored return values Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 012/108] virtiofsd: Fix common header and define for QEMU builds Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` Dr. David Alan Gilbert (git) [this message]
2020-01-23 16:44 ` [PULL 014/108] vitriofsd/passthrough_ll: fix fallocate() ifdefs Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 015/108] virtiofsd: Make fsync work even if only inode is passed in Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 016/108] virtiofsd: Add options for virtio Dr. David Alan Gilbert (git)
2020-01-23 16:44 ` [PULL 017/108] virtiofsd: add -o source=PATH to help output Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 018/108] virtiofsd: Open vhost connection instead of mounting Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 019/108] virtiofsd: Start wiring up vhost-user Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 020/108] virtiofsd: Add main virtio loop Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 021/108] virtiofsd: get/set features callbacks Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 022/108] virtiofsd: Start queue threads Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 023/108] virtiofsd: Poll kick_fd for queue Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 024/108] virtiofsd: Start reading commands from queue Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 025/108] virtiofsd: Send replies to messages Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 026/108] virtiofsd: Keep track of replies Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 027/108] virtiofsd: Add Makefile wiring for virtiofsd contrib Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 028/108] virtiofsd: Fast path for virtio read Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 029/108] virtiofsd: add --fd=FDNUM fd passing option Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 030/108] virtiofsd: make -f (foreground) the default Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 031/108] virtiofsd: add vhost-user.json file Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 032/108] virtiofsd: add --print-capabilities option Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 033/108] virtiofs: Add maintainers entry Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 034/108] virtiofsd: passthrough_ll: create new files in caller's context Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 035/108] virtiofsd: passthrough_ll: add lo_map for ino/fh indirection Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 036/108] virtiofsd: passthrough_ll: add ino_map to hide lo_inode pointers Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 037/108] virtiofsd: passthrough_ll: add dirp_map to hide lo_dirp pointers Dr. David Alan Gilbert (git)
2020-03-20 13:38   ` Peter Maydell
2020-01-23 16:45 ` [PULL 038/108] virtiofsd: passthrough_ll: add fd_map to hide file descriptors Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 039/108] virtiofsd: passthrough_ll: add fallback for racy ops Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 040/108] virtiofsd: validate path components Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 041/108] virtiofsd: Plumb fuse_bufvec through to do_write_buf Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 042/108] virtiofsd: Pass write iov's all the way through Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 043/108] virtiofsd: add fuse_mbuf_iter API Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 044/108] virtiofsd: validate input buffer sizes in do_write_buf() Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 045/108] virtiofsd: check input buffer size in fuse_lowlevel.c ops Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 046/108] virtiofsd: prevent ".." escape in lo_do_lookup() Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 047/108] virtiofsd: prevent ".." escape in lo_do_readdir() Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 048/108] virtiofsd: use /proc/self/fd/ O_PATH file descriptor Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 049/108] virtiofsd: sandbox mount namespace Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 050/108] virtiofsd: move to an empty network namespace Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 051/108] virtiofsd: move to a new pid namespace Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 052/108] virtiofsd: add seccomp whitelist Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 053/108] virtiofsd: Parse flag FUSE_WRITE_KILL_PRIV Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 054/108] virtiofsd: cap-ng helpers Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 055/108] virtiofsd: Drop CAP_FSETID if client asked for it Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 056/108] virtiofsd: set maximum RLIMIT_NOFILE limit Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 057/108] virtiofsd: fix libfuse information leaks Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 058/108] virtiofsd: add --syslog command-line option Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 059/108] virtiofsd: print log only when priority is high enough Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 060/108] virtiofsd: Add ID to the log with FUSE_LOG_DEBUG level Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 061/108] virtiofsd: Add timestamp " Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 062/108] virtiofsd: Handle reinit Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 063/108] virtiofsd: Handle hard reboot Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 064/108] virtiofsd: Kill threads when queues are stopped Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 065/108] vhost-user: Print unexpected slave message types Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 066/108] contrib/libvhost-user: Protect slave fd with mutex Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 067/108] virtiofsd: passthrough_ll: add renameat2 support Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 068/108] virtiofsd: passthrough_ll: disable readdirplus on cache=never Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 069/108] virtiofsd: passthrough_ll: control readdirplus Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 070/108] virtiofsd: rename unref_inode() to unref_inode_lolocked() Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 071/108] virtiofsd: fail when parent inode isn't known in lo_do_lookup() Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 072/108] virtiofsd: extract root inode init into setup_root() Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 073/108] virtiofsd: passthrough_ll: clean up cache related options Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 074/108] virtiofsd: passthrough_ll: use hashtable Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 075/108] virtiofsd: Clean up inodes on destroy Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 076/108] virtiofsd: support nanosecond resolution for file timestamp Dr. David Alan Gilbert (git)
2020-01-23 16:45 ` [PULL 077/108] virtiofsd: fix error handling in main() Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 078/108] virtiofsd: cleanup allocated resource in se Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 079/108] virtiofsd: fix memory leak on lo.source Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 080/108] virtiofsd: add helper for lo_data cleanup Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 081/108] virtiofsd: Prevent multiply running with same vhost_user_socket Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 082/108] virtiofsd: enable PARALLEL_DIROPS during INIT Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 083/108] virtiofsd: fix incorrect error handling in lo_do_lookup Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 084/108] Virtiofsd: fix memory leak on fuse queueinfo Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 085/108] virtiofsd: Support remote posix locks Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 086/108] virtiofsd: use fuse_lowlevel_is_virtio() in fuse_session_destroy() Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 087/108] virtiofsd: prevent fv_queue_thread() vs virtio_loop() races Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 088/108] virtiofsd: make lo_release() atomic Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 089/108] virtiofsd: prevent races with lo_dirp_put() Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 090/108] virtiofsd: rename inode->refcount to inode->nlookup Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 091/108] libvhost-user: Fix some memtable remap cases Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 092/108] virtiofsd: passthrough_ll: fix refcounting on remove/rename Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 093/108] virtiofsd: introduce inode refcount to prevent use-after-free Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 094/108] virtiofsd: do not always set FUSE_FLOCK_LOCKS Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 095/108] virtiofsd: convert more fprintf and perror to use fuse log infra Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 096/108] virtiofsd: Reset O_DIRECT flag during file open Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 097/108] virtiofsd: Fix data corruption with O_APPEND write in writeback mode Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 098/108] virtiofsd: passthrough_ll: Use cache_readdir for directory open Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 099/108] virtiofsd: add definition of fuse_buf_writev() Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 100/108] virtiofsd: use fuse_buf_writev to replace fuse_buf_write for better performance Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 101/108] virtiofsd: process requests in a thread pool Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 102/108] virtiofsd: prevent FUSE_INIT/FUSE_DESTROY races Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 103/108] virtiofsd: fix lo_destroy() resource leaks Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 104/108] virtiofsd: add --thread-pool-size=NUM option Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 105/108] virtiofsd: Convert lo_destroy to take the lo->mutex lock itself Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 106/108] virtiofsd/passthrough_ll: Pass errno to fuse_reply_err() Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 107/108] virtiofsd: stop all queue threads on exit in virtio_loop() Dr. David Alan Gilbert (git)
2020-01-23 16:46 ` [PULL 108/108] virtiofsd: add some options to the help message Dr. David Alan Gilbert (git)
2020-01-23 19:32 ` [PULL 000/108] virtiofs queue Dr. David Alan Gilbert
2020-01-24 11:06   ` Peter Maydell
2020-01-23 21:18 ` no-reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200123164630.91498-14-dgilbert@redhat.com \
    --to=dgilbert@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.