From: "Darrick J. Wong" <djwong@kernel.org>
To: Bernd Schubert <bernd@bsbernd.com>
Cc: linux-fsdevel@vger.kernel.org, Miklos Szeredi <miklos@szeredi.hu>,
Joanne Koong <joannelkoong@gmail.com>, Kevin Chen <kchen@ddn.com>,
Bernd Schubert <bschubert@ddn.com>
Subject: Re: [PATCH v2 22/25] Add support for sync-init of unprivileged daemons
Date: Mon, 20 Apr 2026 09:31:18 -0700 [thread overview]
Message-ID: <20260420163118.GM7727@frogsfrogsfrogs> (raw)
In-Reply-To: <ff90a513-c7e6-4227-b605-b055d0e28247@bsbernd.com>
On Mon, Apr 20, 2026 at 02:02:45AM +0200, Bernd Schubert wrote:
>
>
> On 3/31/26 02:54, Darrick J. Wong wrote:
> > On Thu, Mar 26, 2026 at 10:34:55PM +0100, Bernd Schubert wrote:
> >> From: Bernd Schubert <bschubert@ddn.com>
> >>
> >> This makes use of the bidirectional fusermount. Added is
> >> doc/README.mount, which explains the new bidirectional
> >> communication with fusermount.
> >>
> >> Signed-off-by: Bernd Schubert <bschubert@ddn.com>
<snip>
> >> + * On success, *sock_fd_out contains the socket fd for signaling fusermount3
> >> + */
> >> +int mount_fusermount_obtain_fd(const char *mountpoint, struct mount_opts *mo,
> >> + const char *opts, int *sock_fd_out,
> >> + pid_t *pid_out)
> >> +{
> >> + int fds[2];
> >> + pid_t pid;
> >> + int res;
> >> + char arg_fd_entry[ARG_FD_ENTRY_SIZE];
> >> + posix_spawn_file_actions_t action;
> >> + int fd, status;
> >> +
> >> + (void)mo;
> >> +
> >> + if (!mountpoint) {
> >> + fuse_log(FUSE_LOG_ERR, "fuse: missing mountpoint parameter\n");
> >> + return -1;
> >> + }
> >> +
> >> + res = socketpair(PF_UNIX, SOCK_STREAM, 0, fds);
> >> + if (res == -1) {
> >> + fuse_log(FUSE_LOG_ERR, "Running %s: socketpair() failed: %s\n",
> >> + FUSERMOUNT_PROG, strerror(errno));
> >> + return -1;
> >> + }
> >> +
> >> + snprintf(arg_fd_entry, sizeof(arg_fd_entry), "%i", fds[0]);
> >> + setenv(FUSE_COMMFD_ENV, arg_fd_entry, 1);
> >> + snprintf(arg_fd_entry, sizeof(arg_fd_entry), "%i", fds[1]);
> >> + setenv(FUSE_COMMFD2_ENV, arg_fd_entry, 1);
> >> +
> >> + char const *const argv[] = {
> >> + FUSERMOUNT_PROG,
> >> + "--sync-init",
> >> + "-o", opts ? opts : "",
> >> + "--",
> >> + mountpoint,
> >> + NULL,
> >> + };
> >> +
> >> + posix_spawn_file_actions_init(&action);
> >> + posix_spawn_file_actions_addclose(&action, fds[1]);
> >> + status = fusermount_posix_spawn(&action, argv, &pid);
> >> + posix_spawn_file_actions_destroy(&action);
> >
> > Huh. Would have been nice to have known about posix_spawn when I was
> > writing xfs_healer.
>
> Could be still updated to that?
Yeah, it's possible.
> >
> >> +
> >> + if (status != 0) {
> >> + close(fds[0]);
> >> + close(fds[1]);
> >> + return -1;
> >> + }
> >> +
> >> + close(fds[0]);
> >> +
> >> + fd = receive_fd(fds[1]);
> >> + if (fd < 0) {
> >> + close(fds[1]);
> >> + waitpid(pid, NULL, 0);
> >> + return -1;
> >> + }
> >> +
> >> + fcntl(fd, F_SETFD, FD_CLOEXEC);
> >> +
> >> + /* Return socket fd for later signaling */
> >> + *sock_fd_out = fds[1];
> >> + *pid_out = pid;
> >> +
> >> + return fd;
> >> +}
> >> +
> >> +/*
> >> + * Send proceed signal to fusermount3 and wait for mount result
> >> + * Returns: 0 on success, -1 on failure
> >> + */
> >> +int fuse_fusermount_proceed_mnt(int sock_fd)
> >> +{
> >> + char buf = '\0';
> >> + ssize_t res;
> >> +
> >> + /* Send proceed signal */
> >> + do {
> >> + res = send(sock_fd, &buf, 1, 0);
> >> + } while (res == -1 && errno == EINTR);
> >
> > Hrmm, I probably need to wrap the sendmsg/recvmsg calls in my own
> > patches to do this loop, don't I?
Nope. Sequential packet sockets preserve boundaries between records
sent with MSG_EOR, and reads are required to provide a buffer large
enough to read the entire record. Undersized read buffers result in the
rest of the record being dropped silently.
IOWs, there's no possibility of a short read or a short write. But
perhaps I should be checking SO_SNDBUF (aka the maximum record size).
> I guess so, I will try to eventually look into your series later. Go
> painfully late (or early) to update code with all your review comments
> (and with family couldn't work through entirely in peace...).
<nod> I'll do a new posting to the new list before I depart for
LinuxFest on Thursday.
--D
next prev parent reply other threads:[~2026-04-20 16:31 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-26 21:34 [PATCH v2 00/25] libfuse: Add support for synchronous init Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 01/25] ci-build: Add environment logging Bernd Schubert
2026-03-27 3:20 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 02/25] Add 'STRCPY' to the checkpatch ignore option Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 03/25] checkpatch.pl: Add _Atomic to $Attribute patttern Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 04/25] Add a new daemonize API Bernd Schubert
2026-03-27 22:06 ` Darrick J. Wong
2026-03-27 23:07 ` Bernd Schubert
2026-03-28 4:01 ` Darrick J. Wong
2026-03-30 17:45 ` Darrick J. Wong
2026-03-30 18:26 ` Bernd Schubert
2026-03-30 21:25 ` Darrick J. Wong
2026-03-30 17:55 ` Darrick J. Wong
2026-04-18 18:26 ` Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 05/25] Sync fuse_kernel.h with linux-6.18 Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 06/25] mount.c: Split fuse_mount_sys to prepare privileged sync FUSE_INIT Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 07/25] Add FUSE_MOUNT_FALLBACK_NEEDED define for -2 mount errors Bernd Schubert
2026-03-27 3:20 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 08/25] Refactor mount code / move common functions to mount_util.c Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 09/25] Use asprintf() for fuse_mnt_build_{source,type} Bernd Schubert
2026-03-27 3:24 ` Darrick J. Wong
2026-03-30 15:34 ` Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 10/25] lib/mount.c: Remove some BSD ifdefs Bernd Schubert
2026-03-27 3:28 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 11/25] Move 'struct mount_flags' to util.h Bernd Schubert
2026-03-30 18:11 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 12/25] conftest.py: Add more valgrind filter patterns Bernd Schubert
2026-03-30 18:16 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 13/25] Add support for the new linux mount API Bernd Schubert
2026-03-30 18:27 ` Darrick J. Wong
2026-04-19 17:45 ` Bernd Schubert
2026-04-20 15:48 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 14/25] fuse mount: Support synchronous FUSE_INIT (privileged daemon) Bernd Schubert
2026-03-30 18:44 ` Darrick J. Wong
2026-04-19 22:36 ` Bernd Schubert
2026-04-20 15:53 ` Darrick J. Wong
2026-04-20 16:40 ` Bernd Schubert
2026-04-20 16:43 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 15/25] Add fuse_session_set_debug() to enable debug output without foreground Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 16/25] Move more generic mount code to mount_util.{c,h} Bernd Schubert
2026-03-30 18:47 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 17/25] Split the fusermount do_mount function Bernd Schubert
2026-03-30 18:48 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 18/25] fusermout: Remove the large read check Bernd Schubert
2026-03-27 3:32 ` Darrick J. Wong
2026-03-30 15:26 ` Bernd Schubert
2026-03-30 17:57 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 19/25] fusermount: Refactor extract_x_options Bernd Schubert
2026-03-26 21:34 ` [PATCH v2 20/25] Make fusermount work bidirectional for sync init Bernd Schubert
2026-03-30 19:03 ` Darrick J. Wong
2026-04-19 23:18 ` Bernd Schubert
2026-04-20 15:55 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 21/25] New mount API: Filter out "user=" Bernd Schubert
2026-03-27 3:32 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 22/25] Add support for sync-init of unprivileged daemons Bernd Schubert
2026-03-31 0:54 ` Darrick J. Wong
2026-04-20 0:02 ` Bernd Schubert
2026-04-20 16:31 ` Darrick J. Wong [this message]
2026-03-26 21:34 ` [PATCH v2 23/25] Move fuse_mnt_build_{source,type} to mount_util.c Bernd Schubert
2026-03-30 19:04 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 24/25] Add mount and daemonization README documents Bernd Schubert
2026-03-31 1:17 ` Darrick J. Wong
2026-04-20 0:21 ` Bernd Schubert
2026-04-20 16:39 ` Darrick J. Wong
2026-03-26 21:34 ` [PATCH v2 25/25] Add a background debug option to passthrough hp Bernd Schubert
2026-03-30 19:04 ` Darrick J. Wong
2026-04-07 12:04 ` fuse-devel list on kernel.org Amir Goldstein
2026-04-07 12:25 ` Bernd Schubert
2026-04-07 12:29 ` Amir Goldstein
2026-04-07 18:05 ` Bernd Schubert
2026-04-07 19:10 ` Darrick J. Wong
2026-04-08 8:21 ` Amir Goldstein
2026-04-13 12:23 ` Amir Goldstein
2026-04-13 12:36 ` Bernd Schubert
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=20260420163118.GM7727@frogsfrogsfrogs \
--to=djwong@kernel.org \
--cc=bernd@bsbernd.com \
--cc=bschubert@ddn.com \
--cc=joannelkoong@gmail.com \
--cc=kchen@ddn.com \
--cc=linux-fsdevel@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.