Re: [PATCH 2/2] fuse: wait for aborted connection before releasing last fuse_dev
From: Pavel Begunkov
Date: Mon May 18 2026 - 06:55:18 EST
On 5/18/26 10:50, Bernd Schubert wrote:
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 5dda7080f4a9..7d9c06654a98 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -2566,6 +2566,7 @@ int fuse_dev_release(struct inode *inode, struct file *file)
if (last) {
WARN_ON(fc->iq.fasync != NULL);
fuse_abort_conn(fc);
+ fuse_wait_aborted(fc);
}
fuse_conn_put(fc);
}
I might be wrong, but I don't think it is possible, Maybe Pavel or Jens
could help (added to CC). Basically as long as
fuse_uring_async_stop_queues() runs we do not have completed all
io-uring commands via io_uring_cmd_done() and as long as we do not have
completed these io-uring commands.
If I understand the question right, yes, fuse io_uring cmd requests hold
a reference to the fuse file, so until you complete them the file will
not get released.
Sorry, had totally messed up the phrase, can't read it myself.
What I mean is that the io-uring was set up with /dev/fuse as file and
as long as fuse holds non-completed 'struct io_uring_cmd *cmd' objects
there is a reference on the /dev/fuse fd, which blocks the call of
fuse_dev_release().
Yep, that's right
--
Pavel Begunkov