All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luis Henriques <luis@igalia.com>
To: Miklos Szeredi <miklos@szeredi.hu>
Cc: Bernd Schubert <bernd@bsbernd.com>,
	 linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
	 kernel-dev@igalia.com
Subject: Re: [PATCH] fuse: fix possible deadlock if rings are never initialized
Date: Wed, 19 Mar 2025 11:32:33 +0000	[thread overview]
Message-ID: <874izpb6i6.fsf@igalia.com> (raw)
In-Reply-To: <20250306111218.13734-1-luis@igalia.com> (Luis Henriques's message of "Thu, 6 Mar 2025 11:12:18 +0000")

On Thu, Mar 06 2025, Luis Henriques wrote:

> When mounting a user-space filesystem using io_uring, the initialization
> of the rings is done separately in the server side.  If for some reason
> (e.g. a server bug) this step is not performed it will be impossible to
> unmount the filesystem if there are already requests waiting.
>
> This issue is easily reproduced with the libfuse passthrough_ll example,
> if the queue depth is set to '0' and a request is queued before trying to
> unmount the filesystem.  When trying to force the unmount, fuse_abort_conn()
> will try to wake up all tasks waiting in fc->blocked_waitq, but because the
> rings were never initialized, fuse_uring_ready() will never return 'true'.
>
> Fixes: 3393ff964e0f ("fuse: block request allocation until io-uring init is complete")
> Signed-off-by: Luis Henriques <luis@igalia.com>
> ---
>  fs/fuse/dev.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
> index 7edceecedfa5..2fe565e9b403 100644
> --- a/fs/fuse/dev.c
> +++ b/fs/fuse/dev.c
> @@ -77,7 +77,7 @@ void fuse_set_initialized(struct fuse_conn *fc)
>  static bool fuse_block_alloc(struct fuse_conn *fc, bool for_background)
>  {
>  	return !fc->initialized || (for_background && fc->blocked) ||
> -	       (fc->io_uring && !fuse_uring_ready(fc));
> +	       (fc->io_uring && fc->connected && !fuse_uring_ready(fc));
>  }
>  
>  static void fuse_drop_waiting(struct fuse_conn *fc)
>

Gentle ping.  I was wondering if this would be worth picking before 6.14
is out.

Cheers,
-- 
Luís

  parent reply	other threads:[~2025-03-19 11:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-06 11:12 [PATCH] fuse: fix possible deadlock if rings are never initialized Luis Henriques
2025-03-06 11:45 ` Bernd Schubert
2025-03-06 13:16   ` Luis Henriques
2025-03-06 13:48     ` Bernd Schubert
2025-03-19 11:32 ` Luis Henriques [this message]
2025-03-19 11:42 ` Miklos Szeredi
2025-03-19 13:00 ` Christian Brauner

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=874izpb6i6.fsf@igalia.com \
    --to=luis@igalia.com \
    --cc=bernd@bsbernd.com \
    --cc=kernel-dev@igalia.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    /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.