Linux filesystem development
 help / color / mirror / Atom feed
From: "Darrick J. Wong" <djwong@kernel.org>
To: bernd@bsbernd.com
Cc: joannelkoong@gmail.com, neal@gompa.dev,
	fuse-devel@lists.linux.dev, linux-fsdevel@vger.kernel.org,
	miklos@szeredi.hu
Subject: [PATCH v1.2 1/2] libfuse: don't use SYNC_INIT unless asked for
Date: Tue, 5 May 2026 16:10:59 -0700	[thread overview]
Message-ID: <20260505231059.GE7739@frogsfrogsfrogs> (raw)
In-Reply-To: <177795853473.1133476.16730865173873586203.stgit@frogsfrogsfrogs>

From: Darrick J. Wong <djwong@kernel.org>

fuse2fs calls fuse_main, then starts threads from ->init.  It doesn't
call fuse_daemonize_early_start because I haven't ported it to use any
of the new APIs.  I don't have io_uring enabled for fuse on my dev box.

fuse_main calls fuse_session_mount calls fuse_session_mount_new_api
calls session_start_sync_init.  At the start of the function,
se->want_sync_init, se->uring.enable, and daemonize.active are all
false.  The first branch is not taken, so we call FUSE_DEV_IOC_SYNC_INIT
and enable sync_init even though the user didn't ask for that and didn't
prepare for it either.

FUSE_DEV_IOC_SYNC_INIT succeeds, so we send the synchronous FUSE_INIT
from mount, which calls fuse2fs' init() method.  That starts the
background threads and returns.  Upon return to the kernel, the mount()
now succeeds, and the next thing that fuse_main does is call
fuse_daemonize().  Since we didn't call fuse_daemonize_early_start, the
daemonize forks the process and the threads die with the parent.

If we didn't ask for SYNC_INIT, don't enable it.  This is needed to
maintain compatibility with older fuse servers that only support
asynchronous FUSE_INIT.

Fixes: 3e1101057aea57 ("fuse mount: Support synchronous FUSE_INIT (privileged daemon)")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
--
v1.2: simplify the logic even more
v1.1: improve commit message, refine logging logic
---
 lib/fuse_lowlevel.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 0e16845d2f14ff..6e078e820eddec 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -4475,8 +4475,11 @@ static int session_start_sync_init(struct fuse_session *se, int fd)
 {
 	int err, res;
 
-	if (!se->want_sync_init &&
-		(se->uring.enable && !fuse_daemonize_is_used())) {
+	/*
+	 * Older fuse servers do not set want_sync_init or start the new
+	 * daemonize code, so they get async init.
+	 */
+	if (!fuse_daemonize_is_used() || !se->want_sync_init) {
 		if (se->debug)
 			fuse_log(FUSE_LOG_DEBUG,
 					"fuse: sync init not enabled\n");

  parent reply	other threads:[~2026-05-05 23:10 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-05  5:21 [PATCHBOMB] libfuse: various fixes for new mount code Darrick J. Wong
2026-05-05  5:23 ` [PATCHSET 1/2] libfuse: new mount API and SYNC_INIT fixes Darrick J. Wong
2026-05-05  5:23   ` [PATCH 1/2] libfuse: don't use SYNC_INIT unless asked for Darrick J. Wong
2026-05-05  7:30     ` Bernd Schubert
2026-05-05  8:17       ` Bernd Schubert
2026-05-05 16:27         ` Darrick J. Wong
2026-05-05 16:44     ` [PATCH v1.1 " Darrick J. Wong
2026-05-05 20:02       ` Bernd Schubert
2026-05-05 22:08         ` Darrick J. Wong
2026-05-05 22:29           ` Bernd Schubert
2026-05-05 23:03             ` Darrick J. Wong
2026-05-05 23:10     ` Darrick J. Wong [this message]
2026-05-05  5:23   ` [PATCH 2/2] libfuse: always send the subtype to the kernel when using fsconfig() Darrick J. Wong
2026-05-05  7:41     ` Bernd Schubert
2026-05-05 16:38       ` Darrick J. Wong
2026-05-05 23:09   ` [PATCH 3/2] mount_util: fix mount_flags entries for MS_RDONLY Darrick J. Wong
2026-05-05  5:23 ` [PATCHSET 2/2] libfuse: new mount service container fixes Darrick J. Wong
2026-05-05  5:24   ` [PATCH 01/10] util/mount.fuse.c: loop in waitpid Darrick J. Wong
2026-05-05  5:24   ` [PATCH 02/10] fuse_service: handle weird behavior during SCM_RIGHTS fd transfers Darrick J. Wong
2026-05-05  5:24   ` [PATCH 03/10] examples: improve documentation of the new systemd service fuse servers Darrick J. Wong
2026-05-05  5:24   ` [PATCH 04/10] example/single_file: sync backing fd when statx wants us to fsync Darrick J. Wong
2026-05-05  5:25   ` [PATCH 05/10] example/single_file: fix ctime handling Darrick J. Wong
2026-05-05  5:25   ` [PATCH 06/10] libfuse: fix cppcheck complaints about constifying pointers Darrick J. Wong
2026-05-05  5:25   ` [PATCH 07/10] libfuse: fix cppcheck complaints about constifying pointers in user-visible ABI Darrick J. Wong
2026-05-05  5:25   ` [PATCH 08/10] util: fix cppcheck complaints about constifying pointers Darrick J. Wong
2026-05-05  5:26   ` [PATCH 09/10] fuser_conf: fix cppcheck complaints Darrick J. Wong
2026-05-05  5:26   ` [PATCH 10/10] example: fix cppcheck complaints about constifying pointers Darrick J. Wong
2026-05-06 21:27   ` [PATCHSET 2/2] libfuse: new mount service container fixes Bernd Schubert
2026-05-06 21:36     ` Bernd Schubert
2026-05-05  5:26 ` [GIT PULL 1/2] libfuse: new mount API and SYNC_INIT fixes Darrick J. Wong
2026-05-05  5:26 ` [GIT PULL 2/2] libfuse: new mount service container fixes Darrick J. Wong

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=20260505231059.GE7739@frogsfrogsfrogs \
    --to=djwong@kernel.org \
    --cc=bernd@bsbernd.com \
    --cc=fuse-devel@lists.linux.dev \
    --cc=joannelkoong@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=miklos@szeredi.hu \
    --cc=neal@gompa.dev \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox