Re: [PATCH 2/2] fuse: wait for aborted connection before releasing last fuse_dev
Pavel Begunkov <[email protected]>
| Newsgroups | org.kernel.vger.io-uring,dev.linux.lists.fuse-devel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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