diff options
author | Bernd Schubert <bschubert@ddn.com> | 2025-01-23 19:55:32 +0300 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2025-01-27 20:02:23 +0300 |
commit | 2d4fde59fd502a65c1698b61ad4d0f10a9ab665a (patch) | |
tree | 6eed6005e9e5b0bbc1ac602e75c94ec10bb1982c | |
parent | 786412a73e7ee5b00ef3437bbf2f3a250759b2ae (diff) | |
download | linux-2d4fde59fd502a65c1698b61ad4d0f10a9ab665a.tar.xz |
fuse: prevent disabling io-uring on active connections
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>
-rw-r--r-- | fs/fuse/dev_uring.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/fuse/dev_uring.c b/fs/fuse/dev_uring.c index 3bdc75518e5b..ebd2931b4f2a 100644 --- a/fs/fuse/dev_uring.c +++ b/fs/fuse/dev_uring.c @@ -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) |