]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
fuse: prevent disabling io-uring on active connections
authorBernd Schubert <bschubert@ddn.com>
Thu, 23 Jan 2025 16:55:32 +0000 (17:55 +0100)
committerMiklos Szeredi <mszeredi@redhat.com>
Mon, 27 Jan 2025 17:02:23 +0000 (18:02 +0100)
The enable_uring module parameter allows administrators to enable/disable
io-uring support for FUSE at runtime. However, disabling io-uring while
connections already have it enabled can lead to an inconsistent state.

Fix this by keeping io-uring enabled on connections that were already using
it, even if the module parameter is later disabled. This ensures active
FUSE mounts continue to function correctly.

Signed-off-by: Bernd Schubert <bschubert@ddn.com>
Reviewed-by: Luis Henriques <luis@igalia.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
fs/fuse/dev_uring.c

index 3bdc75518e5b16b20622bcee9d46f01a44021db7..ebd2931b4f2acac461091b6b1f1176cde759e2d1 100644 (file)
@@ -1091,11 +1091,6 @@ int fuse_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags)
        u32 cmd_op = cmd->cmd_op;
        int err;
 
-       if (!enable_uring) {
-               pr_info_ratelimited("fuse-io-uring is disabled\n");
-               return -EOPNOTSUPP;
-       }
-
        if ((unlikely(issue_flags & IO_URING_F_CANCEL))) {
                fuse_uring_cancel(cmd, issue_flags);
                return 0;
@@ -1112,6 +1107,12 @@ int fuse_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags)
        }
        fc = fud->fc;
 
+       /* Once a connection has io-uring enabled on it, it can't be disabled */
+       if (!enable_uring && !fc->io_uring) {
+               pr_info_ratelimited("fuse-io-uring is disabled\n");
+               return -EOPNOTSUPP;
+       }
+
        if (fc->aborted)
                return -ECONNABORTED;
        if (!fc->connected)