public inbox for linux-ext4@vger.kernel.org
 help / color / mirror / Atom feed
* [GIT PULL v5.1] libfuse: run fuse servers as a contained service
@ 2026-04-30 21:18 Darrick J. Wong
  2026-04-30 21:34 ` Bernd Schubert
  0 siblings, 1 reply; 10+ messages in thread
From: Darrick J. Wong @ 2026-04-30 21:18 UTC (permalink / raw)
  To: bernd, djwong
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal

Hi Bernd,

Please pull this branch with changes for libfuse.

As usual, I did a test-merge with the main upstream branch as of a few
minutes ago, and didn't see any conflicts.  Please let me know if you
encounter any problems.

--D

The following changes since commit f8abf5d1baa9fb689255f7091937081025749158:

Fix a sign bug in prepare_fuse_fd() (2026-04-29 17:50:45 +0200)

are available in the Git repository at:

https://git.kernel.org/pub/scm/linux/kernel/git/djwong/libfuse.git tags/fuse-service-container_2026-04-30

for you to fetch changes up to 055d94404c8aedf3cb434503f4efa7686c35545b:

nullfs: support fuse systemd service mode (2026-04-30 14:13:32 -0700)

----------------------------------------------------------------
libfuse: run fuse servers as a contained service [v5.1 1/9]

This patchset defines the necessary communication protocols and library
code so that users can mount fuse servers that run in unprivileged
systemd service containers.  That in turn allows unprivileged untrusted
mounts, because the worst that can happen is that a malicious image
crashes the fuse server and the mount dies, instead of corrupting the
kernel's memory.

v5.1: fix some of the SCM_RIGHTS handling code, fix header inclusion
errors, improve documentation of example code, improve statx
flags handling, improve phony timestamp handling
v5: Refactor socket IO into helpers, tighten the security checks in
mount_service.c, always set nosuid/nodev for unprivileged mounts,
use posix_spawnp in mount.fuse, restructure sample programs and hl
library code to avoid the need for unmounting during startup
v4.1: fix various cppcheck/codecheck complaints
v4: fix a large number of security problems that only matter when the
mount helper is being run as a setuid program; fix protocol
byteswapping problems; add CLOEXEC to all files being traded
back and forth; add an umount command; and strengthen mount socket
protocol checks.
v3: refactor the sample code to reduce duplication; fix all the
checkpatch complaints; examples actually build standalone;
fuservicemount handles utab now; cleaned up meson feature detection;
handle MS_ flags that don't translate to MOUNT_ATTR_*
v2: cleaned up error code handling and logging; add some example fuse
service; fuservicemount3 can now be a setuid program to allow
unprivileged userspace to fire up a contained filesystem driver.
This could be opening Pandora's box...
v1: detach from fuse-iomap series

With a bit of luck, this should all go splendidly.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>

----------------------------------------------------------------
Bernd Schubert (1):
Refactor mount code / move common functions to mount_util.c

Darrick J. Wong (12):
mount_service: add systemd socket service mounting helper
mount_service: create high level fuse helpers
mount_service: use the new mount api for the mount service
mount_service: update mtab after a successful mount
util: hoist the fuse.conf parsing and setuid mode enforcement code
util: fix checkpatch complaints in fuser_conf.[ch]
mount_service: enable unprivileged users in a similar manner as fusermount
mount.fuse3: integrate systemd service startup
mount_service: allow installation as a setuid program
example/service_ll: create a sample systemd service fuse server
example/service: create a sample systemd service for a high-level fuse server
nullfs: support fuse systemd service mode

example/single_file.h                            |  195 ++
include/fuse.h                                   |   34 +
include/fuse_service.h                           |  243 +++
include/fuse_service_priv.h                      |  161 ++
lib/fuse_i.h                                     |    3 +
lib/mount_common_i.h                             |   22 +
lib/mount_util.h                                 |    8 +
lib/util.h                                       |   35 +
util/fuser_conf.h                                |   62 +
util/mount_service.h                             |   49 +
.github/workflows/install-ubuntu-dependencies.sh |    4 +
README.md                                        |    3 +
doc/fuservicemount3.8                            |   32 +
doc/meson.build                                  |    3 +
example/meson.build                              |   26 +
example/null.c                                   |   51 +-
example/null.socket.in                           |   15 +
example/null@.service                            |  102 ++
example/service_hl.c                             |  240 +++
example/service_hl.socket.in                     |   15 +
example/service_hl@.service                      |  102 ++
example/service_ll.c                             |  329 ++++
example/service_ll.socket.in                     |   15 +
example/service_ll@.service                      |  102 ++
example/single_file.c                            |  992 ++++++++++
include/meson.build                              |    4 +
lib/fuse_service.c                               | 1248 +++++++++++++
lib/fuse_service_stub.c                          |  106 ++
lib/fuse_versionscript                           |   18 +
lib/helper.c                                     |  160 +-
lib/meson.build                                  |   17 +-
lib/mount.c                                      |   72 +-
lib/mount_util.c                                 |    9 +
meson.build                                      |   53 +-
meson_options.txt                                |    9 +
test/ci-build.sh                                 |   14 +
util/fuser_conf.c                                |  398 ++++
util/fusermount.c                                |  363 +---
util/fuservicemount.c                            |   65 +
util/install_helper.sh                           |    6 +
util/meson.build                                 |   24 +-
util/mount.fuse.c                                |  171 +-
util/mount_service.c                             | 2111 ++++++++++++++++++++++
43 files changed, 7287 insertions(+), 404 deletions(-)
create mode 100644 example/single_file.h
create mode 100644 include/fuse_service.h
create mode 100644 include/fuse_service_priv.h
create mode 100644 lib/mount_common_i.h
create mode 100644 util/fuser_conf.h
create mode 100644 util/mount_service.h
create mode 100644 doc/fuservicemount3.8
create mode 100644 example/null.socket.in
create mode 100644 example/null@.service
create mode 100644 example/service_hl.c
create mode 100644 example/service_hl.socket.in
create mode 100644 example/service_hl@.service
create mode 100644 example/service_ll.c
create mode 100644 example/service_ll.socket.in
create mode 100644 example/service_ll@.service
create mode 100644 example/single_file.c
create mode 100644 lib/fuse_service.c
create mode 100644 lib/fuse_service_stub.c
create mode 100644 util/fuser_conf.c
create mode 100644 util/fuservicemount.c
create mode 100644 util/mount_service.c

Here's the range diff from v5 to v5.1.

 1:  5a6a95b117389d !  1:  af50a468568e3d fs: turn on more warnings for the filesystem code we modify most
    @@ meson.build: base_version = version_parts[0]
     +# W=e
     +if host_machine.cpu_family() == 'x86_64'
     +  WARNINGS += [ '-Werror' ]
     +endif
     +
     +# W=1
    -+WARNINGS += [ '-Wextra', '-Wunused', '-Wno-unused-parameter' ]
    ++WARNINGS += [ '-Wextra', '-Wunused', '-Wunused-parameter' ]
     +WARNINGS += [ '-Wmissing-declarations' ]
     +WARNINGS += [ '-Wrestrict' ]
     +WARNINGS += [ '-Wmissing-format-attribute' ]
     +WARNINGS += [ '-Wmissing-prototypes' ]
     +WARNINGS += [ '-Wold-style-definition' ]
     +WARNINGS += [ '-Wmissing-include-dirs' ]
    @@ meson.build: base_version = version_parts[0]
     +#WARNINGS += [ '-Wsign-compare' ]	# percpu
     +#WARNINGS += [ '-Wswitch-default' ]	# everywhere
     +#WARNINGS += $(call cc-option, -Wpacked-bitfield-compat) # not a gcc thing
     +
     +# Stuff we need to fix in xfsprogs
     +WARNINGS += [ '-Wno-suggest-attribute=format' ]	# dont care about printf crap
    -+WARNINGS += [ '-Wno-shadow' ]	# many programs have global variables
    -+WARNINGS += [ '-Wno-missing-field-initializers' ]	# why is this even a problem?
    ++WARNINGS += [ '-Wshadow' ]	# many programs have global variables
    ++WARNINGS += [ '-Wmissing-field-initializers' ]	# why is this even a problem?
     +WARNINGS += [ '-Wno-sign-compare' ]	# zomg so much macro
    -+WARNINGS += [ '-Wno-dangling-pointer' ]	# gcc 12.2 bug
    ++WARNINGS += [ '-Wdangling-pointer' ]	# gcc 12.2 bug
     +
     +WARNINGS += [ '-Wno-error=type-limits' ]	# rtgroups patchset
     +WARNINGS += [ '-Wno-error=array-bounds' ]	# rtgroups patchset
     +
     +# OpenSSF recommendations March 2025
     +# https://best.openssf.org/Compiler-Hardening-Guides/Compiler-Options-Hardening-Guide-for-C-and-C++.html
     +#WARNINGS += [ '-O2' ]	# already set elsewhere
     +#WARNINGS += [ '-Wall' ]
     +WARNINGS += [ '-Wformat' ]
     +WARNINGS += [ '-Wformat=2' ]
    -+WARNINGS += [ '-Wno-format-nonliteral' ]	# xfs_db and friends fail this everywhere
    ++WARNINGS += [ '-Wno-error=format-nonliteral' ]	# xfs_db and friends fail this everywhere
     +#WARNINGS += [ '-Wconversion' ]
     +WARNINGS += [ '-Wimplicit-fallthrough' ]
     +WARNINGS += [ '-Werror=format-security' ]
     +WARNINGS += [ '-U_FORTIFY_SOURCE' ]
     +WARNINGS += [ '-D_FORTIFY_SOURCE=2' ]	# debian defaults to 2
     +WARNINGS += [ '-D_GLIBCXX_ASSERTIONS' ]
 2:  eda4cf0a9c9400 =  2:  4871909466456d Refactor mount code / move common functions to mount_util.c
 3:  6f098240905230 !  3:  ff81706aa6d6fd mount_service: add systemd socket service mounting helper
    @@ lib/fuse_service.c (new)
     +		.iov_base = buf,
     +		.iov_len = bufsize,
     +	};
     +	union {
     +		struct cmsghdr cmsghdr;
     +		char control[CMSG_SPACE(sizeof(int))];
    -+	} cmsgu;
    ++	} cmsgu = { };
     +	struct msghdr msg = {
     +		.msg_iov = &iov,
     +		.msg_iovlen = 1,
     +		.msg_control = cmsgu.control,
    -+		.msg_controllen = sizeof(cmsgu.control),
    ++
    ++		/*
    ++		 * Do not include padding at the end of the control buffer,
    ++		 * because we don't want to receive fds that we weren't
    ++		 * expecting.
    ++		 */
    ++		.msg_controllen = CMSG_LEN(sizeof(int)),
     +	};
     +	struct cmsghdr *cmsg;
     +	ssize_t size;
     +
    -+	memset(&cmsgu, 0, sizeof(cmsgu));
    ++	/*
    ++	 * A kernel LSM could decide to deny the fd transfer by writing a
    ++	 * negative number (== invalid fd) into the cmsg buffer instead of
    ++	 * installing the fd.  Set the initial fd value to -1 to signal an
    ++	 * invalid fd in case the kernel doesn't even set the cmsg buffer.
    ++	 * It shouldn't do that, but we absolutely don't want a zero here.
    ++	 */
    ++	memset(cmsgu.control, -1, sizeof(cmsgu.control));
     +
     +	size = recvmsg(sf->sockfd, &msg, MSG_TRUNC | MSG_CMSG_CLOEXEC);
     +	if (size < 0) {
     +		int error = errno;
     +
     +		fuse_log(FUSE_LOG_ERR, "fuse: service file reply: %s\n",
    @@ lib/fuse_service.c (new)
     +	    size < offsetof(struct fuse_service_requested_file, path)) {
     +		fuse_log(FUSE_LOG_ERR, "fuse: wrong service file reply size %zd, expected %zd\n",
     +			 size, bufsize);
     +		return -EBADMSG;
     +	}
     +
    ++	if (msg.msg_flags & MSG_CTRUNC) {
    ++		/* SMACK does this */
    ++		fuse_log(FUSE_LOG_ERR,
    ++"fuse: service file reply control data truncated; did an LSM deny SCM_RIGHTS?\n");
    ++		return -EBADMSG;
    ++	}
    ++
     +	cmsg = CMSG_FIRSTHDR(&msg);
     +	if (!cmsg) {
     +		/* no control message means mount.service sent us an error */
     +		return 0;
     +	}
     +	if (cmsg->cmsg_len != CMSG_LEN(sizeof(int))) {
    @@ lib/fuse_service.c (new)
     +	}
     +
     +	ret = __recv_fd(sf, req, req_sz, &fd);
     +	if (ret)
     +		goto out_req;
     +
    ++	if (fd < 0) {
    ++		/* The kernel might have given us an errno instead of an fd */
    ++		fuse_log(FUSE_LOG_ERR, "fuse: service fd transfer failed: %s\n",
    ++			 strerror(-fd));
    ++		ret = fd;
    ++		goto out_req;
    ++	}
    ++
     +	if (ntohl(req->p.magic) != FUSE_SERVICE_OPEN_REPLY) {
     +		fuse_log(FUSE_LOG_ERR, "fuse: service file reply contains wrong magic!\n");
     +		ret = -EBADMSG;
     +		goto out_close;
     +	}
     +	if (strcmp(req->path, path)) {
 4:  82f5466695848e =  4:  2c4995923f9ae2 mount_service: create high level fuse helpers
 5:  e684fb005a841e =  5:  e53ee192306670 mount_service: use the new mount api for the mount service
 6:  13152dd09d7bb0 =  6:  3c58b3ca279cb6 mount_service: update mtab after a successful mount
 7:  ed78d2368a3c15 !  7:  4fa9d76f54011e util: hoist the fuse.conf parsing and setuid mode enforcement code
    @@ util/fuser_conf.c (new)
     +#include <stdlib.h>
     +#include <errno.h>
     +#include <mntent.h>
     +#include <unistd.h>
     +#include <sys/fsuid.h>
     +
    ++#include "fuse_mount_compat.h"
    ++
     +#if defined HAVE_LISTMOUNT
     +#include <linux/mount.h>
     +#include <syscall.h>
     +#include <stdint.h>
     +#endif
     +
 8:  e2f84fca73efb3 =  8:  75ea3fbf340c75 util: fix checkpatch complaints in fuser_conf.[ch]
 9:  ee31248f7b7e31 =  9:  068b0b4b775fc6 mount_service: enable unprivileged users in a similar manner as fusermount
10:  125e8990ce56db ! 10:  4b455b65ca7756 mount.fuse3: integrate systemd service startup
    @@ util/mount.fuse.c: static void drop_and_lock_capabilities(void)
     +	if (ret) {
     +		fprintf(stderr, "%s: could not start %s helper: %s\n",
     +			argv[0], FUSERVICEMOUNT_PROG, strerror(ret));
     +		return MOUNT_SERVICE_FALLBACK_NEEDED;
     +	}
     +
    -+	ret = waitpid(child_pid, &child_status, 0);
    ++	do {
    ++		ret = waitpid(child_pid, &child_status, 0);
    ++	} while (ret < 0 && errno == EINTR);
     +	if (ret < 0) {
     +		fprintf(stderr, "%s: could not wait for %s helper: %s\n",
     +			argv[0], FUSERVICEMOUNT_PROG, strerror(errno));
     +		return MOUNT_SERVICE_FALLBACK_NEEDED;
     +	}
     +
11:  bbc7cbd7a3d185 = 11:  5b8ce2254d15e1 mount_service: allow installation as a setuid program
12:  85aac9e1d35d23 ! 12:  d095eda280909d example/service_ll: create a sample systemd service fuse server
    @@ example/single_file.h (new)
     +/*
     + * FUSE: Filesystem in Userspace
     + * Copyright (C) 2026 Oracle.
     + *
     + * This program can be distributed under the terms of the GNU GPLv2.
     + * See the file GPL2.txt.
    ++ *
    ++ * This file is shared library code for example fuse servers that want to
    ++ * expose a single regular file that wraps another file in a manner that goes
    ++ * beyond simple passthrough.  It is not itself a fuse server.
     + */
     +#ifndef FUSE_SINGLE_FILE_H_
     +#define FUSE_SINGLE_FILE_H_
     +
     +static inline uint64_t round_up(uint64_t b, unsigned int align)
     +{
    @@ example/service_ll.c (new)
     + * This program can be distributed under the terms of the GNU GPLv2.
     + * See the file GPL2.txt.
     + */
     +
     +/** @file
     + *
    -+ * minimal example filesystem using low-level API and systemd service api
    ++ * Minimal example filesystem using low-level API and systemd service API.
    ++ *
    ++ * - Shows how to build a low level FUSE filesystem server that can be managed
    ++ *   by systemd
    ++ * - Enables on-demand filesystem mounting via socket activation
    ++ * - Demonstrates requesting resources from the mount-caller's environment
    ++ * - Allows running FUSE servers with minimal privileges; isolated mount,
    ++ *   network, and pid namespaces; and a separate uid/gid (unlike traditional
    ++ *   FUSE which needs mount permissions and runs in the caller's environment)
     + *
     + * Compile with:
     + *
     + *     gcc -Wall single_file.c service_ll.c `pkg-config fuse3 --cflags --libs` -o service_ll
     + *
     + * Note: If the pkg-config command fails due to the absence of the fuse3.pc
    @@ example/service_ll.c (new)
     + *
     + *     ExecStart=/path/to/service_ll
     + *
     + * to point to the actual path of the service_ll binary.
     + *
     + * Finally, install the service_ll@.service and service_ll.socket files to the
    -+ * systemd service directory, usually /run/systemd/system.
    ++ * systemd service directory, usually /run/systemd/system.  Run these commands
    ++ * to activate:
    ++ *
    ++ *     systemctl daemon-reload
    ++ *     systemctl start service_ll.socket
    ++ *
    ++ * Then mount with:
    ++ *
    ++ *     mount -t fuse.service_ll /dev/sda /mnt
     + *
     + * ## Source code ##
     + * \include service_ll.c
     + * \include service_ll.socket
     + * \include service_ll@.service
     + * \include single_file.c
    @@ example/single_file.c (new)
     +/*
     + * FUSE: Filesystem in Userspace
     + * Copyright (C) 2026 Oracle.
     + *
     + * This program can be distributed under the terms of the GNU GPLv2.
     + * See the file GPL2.txt.
    ++ *
    ++ * This file is shared library code for example fuse servers that want to
    ++ * expose a single regular file that wraps another file in a manner that goes
    ++ * beyond simple passthrough.  It is not itself a fuse server.
     + */
     +#define _GNU_SOURCE
     +#include <pthread.h>
     +#include <errno.h>
     +#include <stdlib.h>
     +#include <errno.h>
    @@ example/single_file.c (new)
     +void single_file_ll_statx(fuse_req_t req, fuse_ino_t ino, int flags, int mask,
     +			  struct fuse_file_info *fi)
     +{
     +	struct statx stx = { };
     +	bool filled;
     +
    -+	(void)flags;
     +	(void)fi;
     +
    ++	if ((flags & AT_STATX_FORCE_SYNC) && is_single_file_ino(ino) &&
    ++	    single_file.backing_fd >= 0) {
    ++		int ret = fsync(single_file.backing_fd);
    ++
    ++		if (ret) {
    ++			fuse_reply_err(req, errno);
    ++			return;
    ++		}
    ++	}
    ++
     +	pthread_mutex_lock(&single_file.lock);
     +	filled = sf_statx(ino, mask, &stx);
     +	pthread_mutex_unlock(&single_file.lock);
     +	if (!filled)
     +		fuse_reply_err(req, ENOENT);
     +	else
    @@ example/single_file.c (new)
     +		if (to_set & FUSE_SET_ATTR_MTIME_NOW)
     +			single_file.mtime = now;
     +		else
     +			single_file.mtime = attr->st_mtim;
     +	}
     +	if (to_set & FUSE_SET_ATTR_CTIME)
    -+		single_file.ctime = attr->st_mtim;
    -+	else
     +		single_file.ctime = now;
     +	pthread_mutex_unlock(&single_file.lock);
     +
     +	single_file_ll_getattr(req, ino, fi);
     +	return;
     +deny:
    @@ example/single_file.c (new)
     +				return -errno;
     +		}
     +
     +		get_now(&now);
     +
     +		pthread_mutex_lock(&single_file.lock);
    ++		single_file.mtime = now;
     +		single_file.ctime = now;
     +		pthread_mutex_unlock(&single_file.lock);
     +
     +		return processed;
     +	}
     +
    @@ example/single_file.c (new)
     +		single_file_name_set = true;
     +	}
     +
     +	get_now(&startup_time);
     +	single_file.atime = startup_time;
     +	single_file.mtime = startup_time;
    ++	single_file.ctime = startup_time;
     +
     +	if (!single_file.ro)
     +		single_file.mode |= 0220;
     +
     +	return 0;
     +}
13:  9702e37fa0895f ! 13:  48f04af4d1cc37 example/service: create a sample systemd service for a high-level fuse server
    @@ example/service_hl.c (new)
     + * This program can be distributed under the terms of the GNU GPLv2.
     + * See the file GPL2.txt.
     + */
     +
     +/** @file
     + *
    -+ * minimal example filesystem using high-level API and systemd service api
    ++ * Minimal example filesystem using high-level API and systemd service API.
    ++ *
    ++ * - Shows how to build a high level FUSE filesystem server that can be managed
    ++ *   by systemd
    ++ * - Enables on-demand filesystem mounting via socket activation
    ++ * - Demonstrates requesting resources from the mount-caller's environment
    ++ * - Allows running FUSE servers with minimal privileges; isolated mount,
    ++ *   network, and pid namespaces; and a separate uid/gid (unlike traditional
    ++ *   FUSE which needs mount permissions and runs in the caller's environment)
     + *
     + * Compile with:
     + *
     + *     gcc -Wall single_file.c service_hl.c `pkg-config fuse3 --cflags --libs` -o service_hl
     + *
     + * Note: If the pkg-config command fails due to the absence of the fuse3.pc
    @@ example/service_hl.c (new)
     + *
     + *     ExecStart=/path/to/service_hl
     + *
     + * to point to the actual path of the service_hl binary.
     + *
     + * Finally, install the service_hl@.service and service_hl.socket files to the
    -+ * systemd service directory, usually /run/systemd/system.
    ++ * systemd service directory, usually /run/systemd/system.  Run these commands
    ++ * to activate:
    ++ *
    ++ *     systemctl daemon-reload
    ++ *     systemctl start service_hl.socket
    ++ *
    ++ * Then mount with:
    ++ *
    ++ *     mount -t fuse.service_hl /dev/sda /mnt
     + *
     + * ## Source code ##
     + * \include service_hl.c
     + * \include service_hl.socket
     + * \include service_hl@.service
     + * \include single_file.c
    @@ example/single_file.c: void single_file_ll_statx(fuse_req_t req, fuse_ino_t ino,
     +	fuse_ino_t ino = single_open_file_path_to_ino(fi, path);
     +	bool filled;
     +
     +	if (!ino)
     +		return -ENOENT;
     +
    ++	if ((statx_flags & AT_STATX_FORCE_SYNC) && is_single_file_ino(ino) &&
    ++	    single_file.backing_fd >= 0) {
    ++		int ret = fsync(single_file.backing_fd);
    ++
    ++		if (ret)
    ++			return -errno;
    ++	}
    ++
     +	pthread_mutex_lock(&single_file.lock);
     +	filled = sf_statx(ino, statx_mask, stx);
     +	pthread_mutex_unlock(&single_file.lock);
     +
     +	return filled ? 0 : -ENOENT;
     +}
    @@ example/single_file.c: void single_file_ll_setattr(fuse_req_t req, fuse_ino_t in
     +		return -EPERM;
     +	if (single_file.ro)
     +		return -EPERM;
     +
     +	pthread_mutex_lock(&single_file.lock);
     +	single_file.mode = (single_file.mode & S_IFMT) | (mode & ~S_IFMT);
    ++	get_now(&single_file.ctime);
     +	pthread_mutex_unlock(&single_file.lock);
     +
     +	return 0;
     +}
     +
     +static void set_time(const struct timespec *ctv, struct timespec *tv)
14:  cd1acb1dc7d492 = 14:  f5597fbd63f7a6 nullfs: support fuse systemd service mode

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-04-30 21:18 [GIT PULL v5.1] libfuse: run fuse servers as a contained service Darrick J. Wong
@ 2026-04-30 21:34 ` Bernd Schubert
  2026-04-30 22:49   ` Darrick J. Wong
  0 siblings, 1 reply; 10+ messages in thread
From: Bernd Schubert @ 2026-04-30 21:34 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal

Hi Darrick,

On 4/30/26 23:18, Darrick J. Wong wrote:
> Hi Bernd,
> 
> Please pull this branch with changes for libfuse.
> 
> As usual, I did a test-merge with the main upstream branch as of a few
> minutes ago, and didn't see any conflicts.  Please let me know if you
> encounter any problems.

pushed to my github branch. BSD build fails with

2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -


checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
report is funny

> int mount_service_main(int argc, char *argv[])
> Warning
> Poorly documented large function
> Poorly documented function: fewer than 2% comments for a function of 113 lines.
> CodeQL



I think I'm going to merge my sync fuse init series tomorrow. Are you ok if 
skip posting another version of the series? Or do you prefer to review the
recent changes and last piece I'm going to do tomorrow?

Basically my goal is to rebase your series against it immediately and to
merge your series during the next few days.


Cheers,
Bernd

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-04-30 21:34 ` Bernd Schubert
@ 2026-04-30 22:49   ` Darrick J. Wong
  2026-05-02 15:59     ` Bernd Schubert
  0 siblings, 1 reply; 10+ messages in thread
From: Darrick J. Wong @ 2026-04-30 22:49 UTC (permalink / raw)
  To: Bernd Schubert
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal

On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
> Hi Darrick,
> 
> On 4/30/26 23:18, Darrick J. Wong wrote:
> > Hi Bernd,
> > 
> > Please pull this branch with changes for libfuse.
> > 
> > As usual, I did a test-merge with the main upstream branch as of a few
> > minutes ago, and didn't see any conflicts.  Please let me know if you
> > encounter any problems.
> 
> pushed to my github branch. BSD build fails with
> 
> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined

Aha, that function got left out of the stub. :(

Annoyingly, on Linux the build succeeds despite the missing symbol
when I tweak meson so that it doesn't build the service stuff.  I would
have thought that --no-undefined would have done that, but alas.

Sorry about that too.  The following patch fixes it.

diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
index d34df3891a6e31..231b98423df628 100644
--- i/lib/fuse_service_stub.c
+++ w/lib/fuse_service_stub.c
@@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
 int fuse_service_accept(struct fuse_service **sfp)
 {
 	*sfp = NULL;
 	return 0;
 }
 
+bool fuse_service_can_allow_other(struct fuse_service *sf)
+{
+	return false;
+}
+
 int fuse_service_append_args(struct fuse_service *sf,
 			     struct fuse_args *existing_args)
 {
 	return -EOPNOTSUPP;
 }
 

> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
> 
> 
> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL

Not sure why checkpatch fails, this is what I got (Debian 13):

$ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
total: 0 errors, 0 warnings, 3908 lines checked

Your patch has no obvious style problems and is ready for submission.

NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY

cppcheck had a few things to say, but none of it was about the changed
lines.

> report is funny
> 
> > int mount_service_main(int argc, char *argv[])
> > Warning
> > Poorly documented large function
> > Poorly documented function: fewer than 2% comments for a function of 113 lines.
> > CodeQL

Hrmm.  I guess I'll have to figure out how to get those things running.
That said, the stuff in mount_service.c is internal to libfuse (i.e.
it's not public library API) so I didn't comment them as intensely.
Would you like more?

> I think I'm going to merge my sync fuse init series tomorrow.

Yay!

> Are you ok if skip posting another version of the series?

               ^ is there an "I" here?  e.g. "...if I skip posting..."?

/My/ normal practice (from xfs) was to repost the series as it was
merged, followed by an announcement.  That way the mailing list is a
complete record of what was merged.  However, very very few people
actually do that, even in the kernel.

I'm ok with you not posting another version of the series.

> Or do you prefer to review the recent changes and last piece I'm going
> to do tomorrow?

Nah, just merge it.  I'll look over the changes once it's in the branch
and if there's anything weird, you or I or anyone else can send patches.
As long as you're not planning to tag it as a release, nothing's set in
stone.

> Basically my goal is to rebase your series against it immediately and
> to merge your series during the next few days.

<nod> Let me know what you want changed, I'll be around since I am not
travelling anywhere for a couple of weeks. :)

I can reflow changes into the patchset, or if you'd prefer, I can add
them as new patches that would go on the end of the series.

--D

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-04-30 22:49   ` Darrick J. Wong
@ 2026-05-02 15:59     ` Bernd Schubert
  2026-05-02 16:26       ` Bernd Schubert
  2026-05-02 16:30       ` Darrick J. Wong
  0 siblings, 2 replies; 10+ messages in thread
From: Bernd Schubert @ 2026-05-02 15:59 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal



On 5/1/26 00:49, Darrick J. Wong wrote:
> On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
>> Hi Darrick,
>>
>> On 4/30/26 23:18, Darrick J. Wong wrote:
>>> Hi Bernd,
>>>
>>> Please pull this branch with changes for libfuse.
>>>
>>> As usual, I did a test-merge with the main upstream branch as of a few
>>> minutes ago, and didn't see any conflicts.  Please let me know if you
>>> encounter any problems.
>>
>> pushed to my github branch. BSD build fails with
>>
>> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
>> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
>> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
> 
> Aha, that function got left out of the stub. :(
> 
> Annoyingly, on Linux the build succeeds despite the missing symbol
> when I tweak meson so that it doesn't build the service stuff.  I would
> have thought that --no-undefined would have done that, but alas.
> 
> Sorry about that too.  The following patch fixes it.
> 
> diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
> index d34df3891a6e31..231b98423df628 100644
> --- i/lib/fuse_service_stub.c
> +++ w/lib/fuse_service_stub.c
> @@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
>  int fuse_service_accept(struct fuse_service **sfp)
>  {
>  	*sfp = NULL;
>  	return 0;
>  }
>  
> +bool fuse_service_can_allow_other(struct fuse_service *sf)
> +{
> +	return false;
> +}
> +
>  int fuse_service_append_args(struct fuse_service *sf,
>  			     struct fuse_args *existing_args)
>  {
>  	return -EOPNOTSUPP;
>  }
>  
> 
>> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
>> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
>>
>>
>> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
> 
> Not sure why checkpatch fails, this is what I got (Debian 13):
> 
> $ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
> No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
> No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
> total: 0 errors, 0 warnings, 3908 lines checked
> 
> Your patch has no obvious style problems and is ready for submission.
> 
> NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY
> 
> cppcheck had a few things to say, but none of it was about the changed
> lines.
> 
>> report is funny
>>
>>> int mount_service_main(int argc, char *argv[])
>>> Warning
>>> Poorly documented large function
>>> Poorly documented function: fewer than 2% comments for a function of 113 lines.
>>> CodeQL
> 
> Hrmm.  I guess I'll have to figure out how to get those things running.
> That said, the stuff in mount_service.c is internal to libfuse (i.e.
> it's not public library API) so I didn't comment them as intensely.
> Would you like more?
> 
>> I think I'm going to merge my sync fuse init series tomorrow.
> 
> Yay!
> 
>> Are you ok if skip posting another version of the series?
> 
>                ^ is there an "I" here?  e.g. "...if I skip posting..."?
> 
> /My/ normal practice (from xfs) was to repost the series as it was
> merged, followed by an announcement.  That way the mailing list is a
> complete record of what was merged.  However, very very few people
> actually do that, even in the kernel.
> 
> I'm ok with you not posting another version of the series.
> 
>> Or do you prefer to review the recent changes and last piece I'm going
>> to do tomorrow?
> 
> Nah, just merge it.  I'll look over the changes once it's in the branch
> and if there's anything weird, you or I or anyone else can send patches.
> As long as you're not planning to tag it as a release, nothing's set in
> stone.
> 
>> Basically my goal is to rebase your series against it immediately and
>> to merge your series during the next few days.
> 
> <nod> Let me know what you want changed, I'll be around since I am not
> travelling anywhere for a couple of weeks. :)
> 
> I can reflow changes into the patchset, or if you'd prefer, I can add
> them as new patches that would go on the end of the series.
> 

Hi Darrick,

eventually merged my patches and made a quick rebase and conflict 
resolving with your branch. Github still reports plenty of issues ;)

Could you fix all of the checkpatch isssues? This one shows plenty
"util: hoist the fuse.conf parsing and setuid mode enforcement code"

bschubert2@imesrv6 libfuse.git>stg series
+ mount_service-add-systemd
+ mount_service-create-high
+ mount_service-use-the-new
+ mount_service-update-mtab
> util-hoist-the-fuse.conf
- util-fix-checkpatch-complaints
- mount_service-enable
- mount.fuse3-integrate-systemd
- mount_service-allow
- example-service_ll-create-a
- example-service-create-a
- nullfs-support-fuse-systemd
- meson-show-feature-summary
bschubert2@imesrv6 libfuse.git>.github/workflows/run-checkpatch.sh 
No typos will be found - file '/home/bschubert2/src/libfuse/libfuse.git/spelling.txt': No such file or directory
No structs that should be const will be found - file '/home/bschubert2/src/libfuse/libfuse.git/const_structs.checkpatch': No such file or directory
ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
#61: FILE: util/fuser_conf.c:33:
+int user_allow_other = 0;

WARNING:LINE_SPACING: Missing a blank line after declarations
#74: FILE: util/fuser_conf.c:46:
+	char *dest = buf;
+	while (1) {

...

I don't have a strong opinion about these two above - feel 
free to disable them. However, in order to merge it, it would
be good to run without any checkpatch report.
And everything that cppcheck and gcc-checker reports, definitely 
need to be fixed.


Thanks,
Bernd

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-05-02 15:59     ` Bernd Schubert
@ 2026-05-02 16:26       ` Bernd Schubert
  2026-05-02 19:05         ` Darrick J. Wong
  2026-05-02 16:30       ` Darrick J. Wong
  1 sibling, 1 reply; 10+ messages in thread
From: Bernd Schubert @ 2026-05-02 16:26 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal



On 5/2/26 17:59, Bernd Schubert wrote:
> 
> 
> On 5/1/26 00:49, Darrick J. Wong wrote:
>> On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
>>> Hi Darrick,
>>>
>>> On 4/30/26 23:18, Darrick J. Wong wrote:
>>>> Hi Bernd,
>>>>
>>>> Please pull this branch with changes for libfuse.
>>>>
>>>> As usual, I did a test-merge with the main upstream branch as of a few
>>>> minutes ago, and didn't see any conflicts.  Please let me know if you
>>>> encounter any problems.
>>>
>>> pushed to my github branch. BSD build fails with
>>>
>>> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
>>> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
>>> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
>>
>> Aha, that function got left out of the stub. :(
>>
>> Annoyingly, on Linux the build succeeds despite the missing symbol
>> when I tweak meson so that it doesn't build the service stuff.  I would
>> have thought that --no-undefined would have done that, but alas.
>>
>> Sorry about that too.  The following patch fixes it.
>>
>> diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
>> index d34df3891a6e31..231b98423df628 100644
>> --- i/lib/fuse_service_stub.c
>> +++ w/lib/fuse_service_stub.c
>> @@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
>>  int fuse_service_accept(struct fuse_service **sfp)
>>  {
>>  	*sfp = NULL;
>>  	return 0;
>>  }
>>  
>> +bool fuse_service_can_allow_other(struct fuse_service *sf)
>> +{
>> +	return false;
>> +}
>> +
>>  int fuse_service_append_args(struct fuse_service *sf,
>>  			     struct fuse_args *existing_args)
>>  {
>>  	return -EOPNOTSUPP;
>>  }
>>  
>>
>>> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
>>> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
>>>
>>>
>>> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
>>
>> Not sure why checkpatch fails, this is what I got (Debian 13):
>>
>> $ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
>> No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
>> No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
>> total: 0 errors, 0 warnings, 3908 lines checked
>>
>> Your patch has no obvious style problems and is ready for submission.
>>
>> NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY
>>
>> cppcheck had a few things to say, but none of it was about the changed
>> lines.
>>
>>> report is funny
>>>
>>>> int mount_service_main(int argc, char *argv[])
>>>> Warning
>>>> Poorly documented large function
>>>> Poorly documented function: fewer than 2% comments for a function of 113 lines.
>>>> CodeQL
>>
>> Hrmm.  I guess I'll have to figure out how to get those things running.
>> That said, the stuff in mount_service.c is internal to libfuse (i.e.
>> it's not public library API) so I didn't comment them as intensely.
>> Would you like more?
>>
>>> I think I'm going to merge my sync fuse init series tomorrow.
>>
>> Yay!
>>
>>> Are you ok if skip posting another version of the series?
>>
>>                ^ is there an "I" here?  e.g. "...if I skip posting..."?
>>
>> /My/ normal practice (from xfs) was to repost the series as it was
>> merged, followed by an announcement.  That way the mailing list is a
>> complete record of what was merged.  However, very very few people
>> actually do that, even in the kernel.
>>
>> I'm ok with you not posting another version of the series.
>>
>>> Or do you prefer to review the recent changes and last piece I'm going
>>> to do tomorrow?
>>
>> Nah, just merge it.  I'll look over the changes once it's in the branch
>> and if there's anything weird, you or I or anyone else can send patches.
>> As long as you're not planning to tag it as a release, nothing's set in
>> stone.
>>
>>> Basically my goal is to rebase your series against it immediately and
>>> to merge your series during the next few days.
>>
>> <nod> Let me know what you want changed, I'll be around since I am not
>> travelling anywhere for a couple of weeks. :)
>>
>> I can reflow changes into the patchset, or if you'd prefer, I can add
>> them as new patches that would go on the end of the series.
>>
> 
> Hi Darrick,
> 
> eventually merged my patches and made a quick rebase and conflict 
> resolving with your branch. Github still reports plenty of issues ;)
> 
> Could you fix all of the checkpatch isssues? This one shows plenty
> "util: hoist the fuse.conf parsing and setuid mode enforcement code"
> 
> bschubert2@imesrv6 libfuse.git>stg series
> + mount_service-add-systemd
> + mount_service-create-high
> + mount_service-use-the-new
> + mount_service-update-mtab
>> util-hoist-the-fuse.conf
> - util-fix-checkpatch-complaints
> - mount_service-enable
> - mount.fuse3-integrate-systemd
> - mount_service-allow
> - example-service_ll-create-a
> - example-service-create-a
> - nullfs-support-fuse-systemd
> - meson-show-feature-summary
> bschubert2@imesrv6 libfuse.git>.github/workflows/run-checkpatch.sh 
> No typos will be found - file '/home/bschubert2/src/libfuse/libfuse.git/spelling.txt': No such file or directory
> No structs that should be const will be found - file '/home/bschubert2/src/libfuse/libfuse.git/const_structs.checkpatch': No such file or directory
> ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
> #61: FILE: util/fuser_conf.c:33:
> +int user_allow_other = 0;
> 
> WARNING:LINE_SPACING: Missing a blank line after declarations
> #74: FILE: util/fuser_conf.c:46:
> +	char *dest = buf;
> +	while (1) {
> 
> ...
> 
> I don't have a strong opinion about these two above - feel 
> free to disable them. However, in order to merge it, it would
> be good to run without any checkpatch report.
> And everything that cppcheck and gcc-checker reports, definitely 
> need to be fixed.

Basically

cd <$FUSEDIR>
BUILDDIR="build-without-examples"
mkdir -p ${BUILDDIR}
meson setup ${BUILDDIR} -Dexamples=false 
ninja -C ${BUILDDIR}
./.github/workflows/codechecker.sh --gcc --codechecker --build-dir ${BUILDDIR}

gcc reports are starting here

bschubert2@imesrv6 libfuse.git>stg series
+ mount_service-add-systemd
+ mount_service-create-high
+ mount_service-use-the-new
+ mount_service-update-mtab
+ util-hoist-the-fuse.conf
+ util-fix-checkpatch-complaints
+ mount_service-enable
> mount.fuse3-integrate-systemd


bschubert2@imesrv6 libfuse.git>git show |head -n5
commit f908bb1504eca167e156671dde957c2e7192b7d2
Author: Darrick J. Wong <djwong@kernel.org>
Date:   Wed Mar 4 13:48:55 2026 -0800

    mount.fuse3: integrate systemd service startup


---==== Severity Statistics ====----
----------------------------
Severity | Number of reports
----------------------------
MEDIUM   |                 1
----------------------------
----=================----

----==== Checker Statistics ====----
-----------------------------------------------------
Checker name           | Severity | Number of reports
-----------------------------------------------------
gcc-deref-before-check | MEDIUM   |                 1
-----------------------------------------------------
----=================----

----==== File Statistics ====----
--------------------------------
File name    | Number of reports
--------------------------------
mount.fuse.c |                 1
--------------------------------
----=================----

----======== Summary ========----
----------------------------------------------
Number of processed analyzer result files | 45
Number of analyzer reports                | 1 
----------------------------------------------
----=================----

To view statistics in a browser run:
> firefox /home/bschubert2/src/libfuse/libfuse.git/build-without-examples/codechecker-html/statistics.html

To view the results in a browser run:
> firefox /home/bschubert2/src/libfuse/libfuse.git/build-without-examples/codechecker-html/index.html
[INFO 2026-05-02 18:25] - ----==== Summary ====----
[INFO 2026-05-02 18:25] - Up-to-date analysis results
[INFO 2026-05-02 18:25] -   gcc: 37
[INFO 2026-05-02 18:25] - Outdated analysis results
[INFO 2026-05-02 18:25] - Failed to analyze
[INFO 2026-05-02 18:25] - Missing analysis results
[INFO 2026-05-02 18:25] -   clangsa: 37
[INFO 2026-05-02 18:25] -   clang-tidy: 37
[INFO 2026-05-02 18:25] -   cppcheck: 37
[INFO 2026-05-02 18:25] -   infer: 37
[INFO 2026-05-02 18:25] - Total analyzed compilation commands: 45
[INFO 2026-05-02 18:25] - Total available compilation commands: 45
[INFO 2026-05-02 18:25] - ----=================----
bschubert2@imesrv6 libfuse.git>




^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-05-02 15:59     ` Bernd Schubert
  2026-05-02 16:26       ` Bernd Schubert
@ 2026-05-02 16:30       ` Darrick J. Wong
  2026-05-02 16:58         ` Bernd Schubert
  1 sibling, 1 reply; 10+ messages in thread
From: Darrick J. Wong @ 2026-05-02 16:30 UTC (permalink / raw)
  To: Bernd Schubert
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal

On Sat, May 02, 2026 at 05:59:06PM +0200, Bernd Schubert wrote:
> 
> 
> On 5/1/26 00:49, Darrick J. Wong wrote:
> > On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
> >> Hi Darrick,
> >>
> >> On 4/30/26 23:18, Darrick J. Wong wrote:
> >>> Hi Bernd,
> >>>
> >>> Please pull this branch with changes for libfuse.
> >>>
> >>> As usual, I did a test-merge with the main upstream branch as of a few
> >>> minutes ago, and didn't see any conflicts.  Please let me know if you
> >>> encounter any problems.
> >>
> >> pushed to my github branch. BSD build fails with
> >>
> >> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
> >> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
> >> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
> > 
> > Aha, that function got left out of the stub. :(
> > 
> > Annoyingly, on Linux the build succeeds despite the missing symbol
> > when I tweak meson so that it doesn't build the service stuff.  I would
> > have thought that --no-undefined would have done that, but alas.
> > 
> > Sorry about that too.  The following patch fixes it.
> > 
> > diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
> > index d34df3891a6e31..231b98423df628 100644
> > --- i/lib/fuse_service_stub.c
> > +++ w/lib/fuse_service_stub.c
> > @@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
> >  int fuse_service_accept(struct fuse_service **sfp)
> >  {
> >  	*sfp = NULL;
> >  	return 0;
> >  }
> >  
> > +bool fuse_service_can_allow_other(struct fuse_service *sf)
> > +{
> > +	return false;
> > +}
> > +
> >  int fuse_service_append_args(struct fuse_service *sf,
> >  			     struct fuse_args *existing_args)
> >  {
> >  	return -EOPNOTSUPP;
> >  }
> >  
> > 
> >> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
> >> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
> >>
> >>
> >> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
> > 
> > Not sure why checkpatch fails, this is what I got (Debian 13):
> > 
> > $ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
> > No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
> > No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
> > total: 0 errors, 0 warnings, 3908 lines checked
> > 
> > Your patch has no obvious style problems and is ready for submission.
> > 
> > NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY
> > 
> > cppcheck had a few things to say, but none of it was about the changed
> > lines.
> > 
> >> report is funny
> >>
> >>> int mount_service_main(int argc, char *argv[])
> >>> Warning
> >>> Poorly documented large function
> >>> Poorly documented function: fewer than 2% comments for a function of 113 lines.
> >>> CodeQL
> > 
> > Hrmm.  I guess I'll have to figure out how to get those things running.
> > That said, the stuff in mount_service.c is internal to libfuse (i.e.
> > it's not public library API) so I didn't comment them as intensely.
> > Would you like more?
> > 
> >> I think I'm going to merge my sync fuse init series tomorrow.
> > 
> > Yay!
> > 
> >> Are you ok if skip posting another version of the series?
> > 
> >                ^ is there an "I" here?  e.g. "...if I skip posting..."?
> > 
> > /My/ normal practice (from xfs) was to repost the series as it was
> > merged, followed by an announcement.  That way the mailing list is a
> > complete record of what was merged.  However, very very few people
> > actually do that, even in the kernel.
> > 
> > I'm ok with you not posting another version of the series.
> > 
> >> Or do you prefer to review the recent changes and last piece I'm going
> >> to do tomorrow?
> > 
> > Nah, just merge it.  I'll look over the changes once it's in the branch
> > and if there's anything weird, you or I or anyone else can send patches.
> > As long as you're not planning to tag it as a release, nothing's set in
> > stone.
> > 
> >> Basically my goal is to rebase your series against it immediately and
> >> to merge your series during the next few days.
> > 
> > <nod> Let me know what you want changed, I'll be around since I am not
> > travelling anywhere for a couple of weeks. :)
> > 
> > I can reflow changes into the patchset, or if you'd prefer, I can add
> > them as new patches that would go on the end of the series.
> > 
> 
> Hi Darrick,
> 
> eventually merged my patches and made a quick rebase and conflict 
> resolving with your branch. Github still reports plenty of issues ;)
> 
> Could you fix all of the checkpatch isssues? This one shows plenty
> "util: hoist the fuse.conf parsing and setuid mode enforcement code"
> 
> bschubert2@imesrv6 libfuse.git>stg series
> + mount_service-add-systemd
> + mount_service-create-high
> + mount_service-use-the-new
> + mount_service-update-mtab
> > util-hoist-the-fuse.conf
> - util-fix-checkpatch-complaints
> - mount_service-enable
> - mount.fuse3-integrate-systemd
> - mount_service-allow
> - example-service_ll-create-a
> - example-service-create-a
> - nullfs-support-fuse-systemd
> - meson-show-feature-summary
> bschubert2@imesrv6 libfuse.git>.github/workflows/run-checkpatch.sh 
> No typos will be found - file '/home/bschubert2/src/libfuse/libfuse.git/spelling.txt': No such file or directory
> No structs that should be const will be found - file '/home/bschubert2/src/libfuse/libfuse.git/const_structs.checkpatch': No such file or directory
> ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
> #61: FILE: util/fuser_conf.c:33:
> +int user_allow_other = 0;
> 
> WARNING:LINE_SPACING: Missing a blank line after declarations
> #74: FILE: util/fuser_conf.c:46:
> +	char *dest = buf;
> +	while (1) {

Oh!  The checkpatch fixes are all in the next commit
"util-fix-checkpatch-complaints".  I kept the checkpatch fixes as a
separate commit so that the hoist change can be inspected more easily.

(XFS practice is to have separate patches for moving the code and
cleaning it up)

> ...
> 
> I don't have a strong opinion about these two above - feel 
> free to disable them. However, in order to merge it, it would
> be good to run without any checkpatch report.
> And everything that cppcheck and gcc-checker reports, definitely 
> need to be fixed.

Hrm, should I try to fix the things that cppcheck complains about in
HEAD?  There's an awful lot of them...

(oh, I see you pushed to master, I'll go rebase now)

--D

Checking build-aarch64/meson-private/sanitycheckc.c ...
Checking build-aarch64/meson-private/sanitycheckc.c: FUSE_USE_VERSION=319...
1/75 files checked 0% done
Checking build-aarch64/fuse_config.h ...
Checking build-aarch64/fuse_config.h: FUSE_USE_VERSION=319...
2/75 files checked 0% done
Checking build-aarch64/libfuse_config.h ...
Checking build-aarch64/libfuse_config.h: FUSE_USE_VERSION=319...
3/75 files checked 0% done
Checking example/cuse.c ...
Checking example/cuse.c: FUSE_USE_VERSION=319...
example/cuse.c:75:18: portability: 'new_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
  memset(new_buf + cusexmp_size, 0, new_size - cusexmp_size);
                 ^
example/cuse.c:113:34: portability: 'cusexmp_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
 fuse_reply_buf(req, cusexmp_buf + off, size);
                                 ^
example/cuse.c:126:21: portability: 'cusexmp_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
 memcpy(cusexmp_buf + off, buf, size);
                    ^
example/cuse.c:145:9: portability: 'in_buf' is of type 'const void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
 in_buf += sizeof(*arg);
        ^
example/cuse.c:150:8: portability: 'addr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
  addr + offsetof(struct fioc_rw_arg, prev_size);
       ^
example/cuse.c:154:8: portability: 'addr' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
  addr + offsetof(struct fioc_rw_arg, new_size);
       ^
example/cuse.c:191:33: portability: 'cusexmp_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
  iov[2].iov_base = cusexmp_buf + off;
                                ^
example/cuse.c:200:22: portability: 'cusexmp_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
  memcpy(cusexmp_buf + arg->offset, in_buf, in_bufsz);
                     ^
Checking example/cuse.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/cuse.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/cuse.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
4/75 files checked 0% done
Checking example/cuse_client.c ...
Checking example/cuse_client.c: FUSE_USE_VERSION=319...
5/75 files checked 1% done
Checking example/hello.c ...
Checking example/hello.c: FUSE_USE_VERSION=319...
Checking example/hello.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking example/hello.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/hello.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
6/75 files checked 1% done
Checking example/hello_ll_uds.c ...
Checking example/hello_ll_uds.c: FUSE_USE_VERSION=319...
example/hello_ll_uds.c:212:3: error: Resource leak: sfd [resourceLeak]
  return -1;
  ^
example/hello_ll_uds.c:216:3: error: Resource leak: sfd [resourceLeak]
  return -1;
  ^
example/hello_ll_uds.c:223:3: error: Resource leak: sfd [resourceLeak]
  return -1;
  ^
example/hello_ll_uds.c:227:2: error: Resource leak: sfd [resourceLeak]
 return cfd;
 ^
Checking example/hello_ll_uds.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/hello_ll_uds.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/hello_ll_uds.c: FUSE_USE_VERSION=319;__KERNEL__...
Checking example/hello_ll_uds.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
7/75 files checked 2% done
Checking example/invalidate_path.c ...
Checking example/invalidate_path.c: FUSE_USE_VERSION=319...
example/invalidate_path.c:169:8: portability: Non reentrant function 'localtime' called. For threadsafe applications it is recommended to use the reentrant replacement function 'localtime_r'. [localtimeCalled]
 now = localtime(&t);
       ^
example/invalidate_path.c:166:13: style: Variable 'now' can be declared as pointer to const [constVariablePointer]
 struct tm *now;
            ^
Checking example/invalidate_path.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking example/invalidate_path.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/invalidate_path.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
8/75 files checked 3% done
Checking example/ioctl.c ...
Checking example/ioctl.c: FUSE_USE_VERSION=319...
example/ioctl.c:60:18: portability: 'new_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
  memset(new_buf + fioc_size, 0, new_size - fioc_size);
                 ^
example/ioctl.c:126:23: portability: 'fioc_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
 memcpy(buf, fioc_buf + offset, size);
                      ^
example/ioctl.c:147:18: portability: 'fioc_buf' is of type 'void *'. When using void pointers in calculations, the behaviour is undefined. [arithOperationsOnVoidPointer]
 memcpy(fioc_buf + offset, buf, size);
                 ^
Checking example/ioctl.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking example/ioctl.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/ioctl.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
9/75 files checked 3% done
Checking example/ioctl.h ...
Checking example/ioctl.h: FUSE_USE_VERSION=319...
10/75 files checked 3% done
Checking example/ioctl_client.c ...
Checking example/ioctl_client.c: FUSE_USE_VERSION=319...
11/75 files checked 4% done
Checking example/notify_inval_entry.c ...
Checking example/notify_inval_entry.c: FUSE_USE_VERSION=319...
example/notify_inval_entry.c:264:11: portability: Non reentrant function 'localtime' called. For threadsafe applications it is recommended to use the reentrant replacement function 'localtime_r'. [localtimeCalled]
    now = localtime(&t);
          ^
example/notify_inval_entry.c:141:34: style: Operator '|' with one operand equal to zero is redundant. [badBitmaskCheck]
        stbuf->st_mode = S_IFREG | 0000;
                                 ^
example/notify_inval_entry.c:274:11: style: The scope of the variable 'old_name' can be reduced. [variableScope]
    char *old_name;
          ^
example/notify_inval_entry.c:260:16: style: Variable 'now' can be declared as pointer to const [constVariablePointer]
    struct tm *now;
               ^
Checking example/notify_inval_entry.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/notify_inval_entry.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/notify_inval_entry.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
12/75 files checked 5% done
Checking example/notify_inval_inode.c ...
Checking example/notify_inval_inode.c: FUSE_USE_VERSION=319...
example/notify_inval_inode.c:274:11: portability: Non reentrant function 'localtime' called. For threadsafe applications it is recommended to use the reentrant replacement function 'localtime_r'. [localtimeCalled]
    now = localtime(&t);
          ^
example/notify_inval_inode.c:271:16: style: Variable 'now' can be declared as pointer to const [constVariablePointer]
    struct tm *now;
               ^
Checking example/notify_inval_inode.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/notify_inval_inode.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/notify_inval_inode.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
13/75 files checked 6% done
Checking example/notify_store_retrieve.c ...
Checking example/notify_store_retrieve.c: FUSE_USE_VERSION=319...
example/notify_store_retrieve.c:329:11: portability: Non reentrant function 'localtime' called. For threadsafe applications it is recommended to use the reentrant replacement function 'localtime_r'. [localtimeCalled]
    now = localtime(&t);
          ^
example/notify_store_retrieve.c:326:16: style: Variable 'now' can be declared as pointer to const [constVariablePointer]
    struct tm *now;
               ^
example/notify_store_retrieve.c:297:20: error: Uninitialized variable: buf [uninitvar]
    assert(strncmp(buf, expected, ret) == 0);
                   ^
Checking example/notify_store_retrieve.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/notify_store_retrieve.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/notify_store_retrieve.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
14/75 files checked 7% done
Checking example/passthrough.c ...
Checking example/passthrough.c: FUSE_USE_VERSION=319...
example/passthrough.c:134:15: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
 while ((de = readdir(dp)) != NULL) {
              ^
example/passthrough_helpers.h:119:2: error: Returning/dereferencing 'res' after it is deallocated / released [deallocret]
 return res;
 ^
example/passthrough_helpers.h:82:10: note: Returning/dereferencing 'res' after it is deallocated / released
   res = close(res);
         ^
example/passthrough_helpers.h:119:2: note: Returning/dereferencing 'res' after it is deallocated / released
 return res;
 ^
Checking example/passthrough.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking example/passthrough.c: FUSE_USE_VERSION=319;HAVE_COPY_FILE_RANGE...
Checking example/passthrough.c: FUSE_USE_VERSION=319;HAVE_FSPACECTL...
Checking example/passthrough.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/passthrough.c: FUSE_USE_VERSION=319;HAVE_SETXATTR...
Checking example/passthrough.c: FUSE_USE_VERSION=319;HAVE_STATX...
Checking example/passthrough.c: FUSE_USE_VERSION=319;HAVE_UTIMENSAT...
Checking example/passthrough.c: FUSE_USE_VERSION=319;__FreeBSD__...
Checking example/passthrough.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
Checking example/passthrough.c: FUSE_USE_VERSION=319;linux...
15/75 files checked 8% done
Checking example/passthrough_fh.c ...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319...
example/passthrough_fh.c:175:15: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
   d->entry = readdir(d->dp);
              ^
example/passthrough_fh.c:143:2: error: Resource leak: d.dp [resourceLeak]
 return 0;
 ^
example/passthrough_fh.c:128:6: style: The scope of the variable 'res' can be reduced. [variableScope]
 int res;
     ^
example/passthrough_fh.c:146:64: style: Parameter 'fi' can be declared as pointer to const [constParameterPointer]
static inline struct xmp_dirp *get_dirp(struct fuse_file_info *fi)
                                                               ^
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_COPY_FILE_RANGE...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_FDATASYNC...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_FSPACECTL...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_FSTATAT...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_LIBULOCKMGR...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_SETXATTR...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_STATX...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;HAVE_UTIMENSAT...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;__FreeBSD__...
Checking example/passthrough_fh.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
16/75 files checked 10% done
Checking example/passthrough_helpers.h ...
Checking example/passthrough_helpers.h: FUSE_USE_VERSION=319...
Checking example/passthrough_helpers.h: FUSE_USE_VERSION=319;HAVE_FALLOCATE...
Checking example/passthrough_helpers.h: FUSE_USE_VERSION=319;HAVE_FSPACECTL...
Checking example/passthrough_helpers.h: FUSE_USE_VERSION=319;HAVE_POSIX_FALLOCATE...
Checking example/passthrough_helpers.h: FUSE_USE_VERSION=319;__FreeBSD__...
17/75 files checked 10% done
Checking example/passthrough_ll.c ...
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319...
example/passthrough_ll.c:705:15: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
   d->entry = readdir(d->dp);
              ^
example/passthrough_ll.c:656:2: error: Resource leak: d.dp [resourceLeak]
 return;
 ^
example/passthrough_ll.c:167:18: style: Variable 'lo' can be declared as pointer to const [constVariablePointer]
 struct lo_data *lo = (struct lo_data *)userdata;
                 ^
example/passthrough_ll.c:204:18: style: Variable 'lo' can be declared as pointer to const [constVariablePointer]
 struct lo_data *lo = lo_data(req);
                 ^
example/passthrough_ll.c:221:19: style: Variable 'inode' can be declared as pointer to const [constVariablePointer]
 struct lo_inode *inode = lo_inode(req, ino);
                  ^
example/passthrough_ll.c:291:66: style: Parameter 'st' can be declared as pointer to const [constParameterPointer]
static struct lo_inode *lo_find(struct lo_data *lo, struct stat *st)
                                                                 ^
example/passthrough_ll.c:425:19: style: Variable 'dir' can be declared as pointer to const [constVariablePointer]
 struct lo_inode *dir = lo_inode(req, parent);
                  ^
example/passthrough_ll.c:631:18: style: Variable 'lo' can be declared as pointer to const [constVariablePointer]
 struct lo_data *lo = lo_data(req);
                 ^
example/passthrough_ll.c:793:18: style: Variable 'lo' can be declared as pointer to const [constVariablePointer]
 struct lo_data *lo = lo_data(req);
                 ^
example/passthrough_ll.c:828:18: style: Variable 'lo' can be declared as pointer to const [constVariablePointer]
 struct lo_data *lo = lo_data(req);
                 ^
example/passthrough_ll.c:876:18: style: Variable 'lo' can be declared as pointer to const [constVariablePointer]
 struct lo_data *lo = lo_data(req);
                 ^
example/passthrough_ll.c:1029:19: style: Variable 'inode' can be declared as pointer to const [constVariablePointer]
 struct lo_inode *inode = lo_inode(req, ino);
                  ^
example/passthrough_ll.c:1079:19: style: Variable 'inode' can be declared as pointer to const [constVariablePointer]
 struct lo_inode *inode = lo_inode(req, ino);
                  ^
example/passthrough_ll.c:1129:19: style: Variable 'inode' can be declared as pointer to const [constVariablePointer]
 struct lo_inode *inode = lo_inode(req, ino);
                  ^
example/passthrough_ll.c:1154:19: style: Variable 'inode' can be declared as pointer to const [constVariablePointer]
 struct lo_inode *inode = lo_inode(req, ino);
                  ^
example/passthrough_ll.c:382:9: style: Variable 'newfd' is assigned a value that is never used. [unreadVariable]
  newfd = -1;
        ^
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;HAVE_COPY_FILE_RANGE...
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;HAVE_FSPACECTL...
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
example/passthrough_ll.c:1220:18: style: Variable 'lo' can be declared as pointer to const [constVariablePointer]
 struct lo_data *lo = lo_data(req);
                 ^
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;HAVE_STATX...
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;__FreeBSD__...
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;__GNUC__...
Checking example/passthrough_ll.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
18/75 files checked 14% done
Checking example/poll.c ...
Checking example/poll.c: FUSE_USE_VERSION=319...
Checking example/poll.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking example/poll.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/poll.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
19/75 files checked 14% done
Checking example/poll_client.c ...
Checking example/poll_client.c: FUSE_USE_VERSION=319...
example/poll_client.c:43:8: style: Variable 'name' can be declared as const array [constVariable]
  char name[] = { hex_map[i], '\0' };
       ^
20/75 files checked 14% done
Checking example/ioctl_ll.c ...
Checking example/ioctl_ll.c: FUSE_USE_VERSION=319...
Checking example/ioctl_ll.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/ioctl_ll.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/ioctl_ll.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
21/75 files checked 16% done
Checking example/ioctl_ll_client.c ...
Checking example/ioctl_ll_client.c: FUSE_USE_VERSION=319...
22/75 files checked 16% done
Checking example/notify_prune.c ...
Checking example/notify_prune.c: FUSE_USE_VERSION=319...
example/notify_prune.c:108:8: portability: Non reentrant function 'localtime' called. For threadsafe applications it is recommended to use the reentrant replacement function 'localtime_r'. [localtimeCalled]
 now = localtime(&t);
       ^
example/notify_prune.c:105:13: style: Variable 'now' can be declared as pointer to const [constVariablePointer]
 struct tm *now;
            ^
Checking example/notify_prune.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/notify_prune.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/notify_prune.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
23/75 files checked 17% done
Checking example/hello_ll.c ...
Checking example/hello_ll.c: FUSE_USE_VERSION=319...
Checking example/hello_ll.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/hello_ll.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/hello_ll.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
24/75 files checked 18% done
Checking example/null.c ...
Checking example/null.c: FUSE_USE_VERSION=319...
Checking example/null.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking example/null.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/null.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
25/75 files checked 18% done
Checking example/printcap.c ...
Checking example/printcap.c: FUSE_USE_VERSION=319...
example/printcap.c:88:2: warning: %d in format string (no. 1) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint]
 printf("Protocol version: %d.%d\n", conn->proto_major,
 ^
example/printcap.c:88:2: warning: %d in format string (no. 2) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint]
 printf("Protocol version: %d.%d\n", conn->proto_major,
 ^
example/printcap.c:108:3: error: Memory leak: mountpoint [memleak]
  return 1;
  ^
example/printcap.c:106:13: warning: If memory allocation fails, then there is a possible null pointer dereference: mountpoint [nullPointerOutOfMemory]
 if(mkdtemp(mountpoint) == NULL) {
            ^
example/printcap.c:105:21: note: Assuming allocation function fails
 mountpoint = strdup("/tmp/fuse_printcap_XXXXXX");
                    ^
example/printcap.c:105:21: note: Assignment 'mountpoint=strdup("/tmp/fuse_printcap_XXXXXX")', assigned value is 0
 mountpoint = strdup("/tmp/fuse_printcap_XXXXXX");
                    ^
example/printcap.c:106:13: note: Null pointer dereference
 if(mkdtemp(mountpoint) == NULL) {
            ^
example/printcap.c:74:55: style: Parameter 'conn' can be declared as pointer to const [constParameterPointer]
static void print_capabilities(struct fuse_conn_info *conn)
                                                      ^
Checking example/printcap.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking example/printcap.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking example/printcap.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
26/75 files checked 18% done
Checking include/cuse_lowlevel.h ...
Checking include/cuse_lowlevel.h: FUSE_USE_VERSION=319...
Checking include/cuse_lowlevel.h: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking include/cuse_lowlevel.h: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking include/cuse_lowlevel.h: FUSE_USE_VERSION=319;__STDC_VERSION__...
27/75 files checked 19% done
Checking include/fuse_log.h ...
Checking include/fuse_log.h: FUSE_USE_VERSION=319...
28/75 files checked 19% done
Checking include/fuse_mount_compat.h ...
Checking include/fuse_mount_compat.h: FUSE_USE_VERSION=319...
29/75 files checked 19% done
Checking include/fuse_opt.h ...
Checking include/fuse_opt.h: FUSE_USE_VERSION=319...
30/75 files checked 20% done
Checking include/fuse.h ...
Checking include/fuse.h: FUSE_USE_VERSION=319...
Checking include/fuse.h: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking include/fuse.h: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking include/fuse.h: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking include/fuse.h: FUSE_USE_VERSION=319;LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS...
Checking include/fuse.h: FUSE_USE_VERSION=319;__STDC_VERSION__...
31/75 files checked 25% done
Checking include/fuse_common.h ...
Checking include/fuse_common.h: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
32/75 files checked 29% done
Checking include/fuse_kernel.h ...
Checking include/fuse_kernel.h: FUSE_USE_VERSION=319...
Checking include/fuse_kernel.h: FUSE_USE_VERSION=319;__KERNEL__...
33/75 files checked 32% done
Checking include/fuse_lowlevel.h ...
Checking include/fuse_lowlevel.h: FUSE_USE_VERSION=319...
Checking include/fuse_lowlevel.h: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking include/fuse_lowlevel.h: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking include/fuse_lowlevel.h: FUSE_USE_VERSION=319;LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS...
Checking include/fuse_lowlevel.h: FUSE_USE_VERSION=319;__STDC_VERSION__...
34/75 files checked 41% done
Checking lib/modules/iconv.c ...
Checking lib/modules/iconv.c: FUSE_USE_VERSION=319...
lib/modules/iconv.c:673:3: warning: If memory allocation fails, then there is a possible null pointer dereference: charmap [nullPointerOutOfMemory]
  charmap);
  ^
lib/modules/iconv.c:664:18: note: Assuming allocation function fails
 charmap = strdup(nl_langinfo(CODESET));
                 ^
lib/modules/iconv.c:664:18: note: Assignment 'charmap=strdup(nl_langinfo(CODESET))', assigned value is 0
 charmap = strdup(nl_langinfo(CODESET));
                 ^
lib/modules/iconv.c:673:3: note: Null pointer dereference
  charmap);
  ^
Checking lib/modules/iconv.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking lib/modules/iconv.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/modules/iconv.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking lib/modules/iconv.c: FUSE_USE_VERSION=319;HAVE_STATX...
Checking lib/modules/iconv.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
35/75 files checked 42% done
Checking lib/modules/subdir.c ...
Checking lib/modules/subdir.c: FUSE_USE_VERSION=319...
lib/modules/subdir.c:104:46: style: Parameter 'd' can be declared as pointer to const [constParameterPointer]
static void transform_symlink(struct subdir *d, const char *path,
                                             ^
Checking lib/modules/subdir.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking lib/modules/subdir.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/modules/subdir.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking lib/modules/subdir.c: FUSE_USE_VERSION=319;HAVE_STATX...
Checking lib/modules/subdir.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
36/75 files checked 44% done
Checking lib/buffer.c ...
Checking lib/buffer.c: FUSE_USE_VERSION=319...
Checking lib/buffer.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/buffer.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/buffer.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/buffer.c: FUSE_USE_VERSION=319;HAVE_SPLICE;FUSE_USE_VERSION...
Checking lib/buffer.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
37/75 files checked 45% done
Checking lib/compat.c ...
Checking lib/compat.c: FUSE_USE_VERSION=319...
Checking lib/compat.c: FUSE_USE_VERSION=319;LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS...
Checking lib/compat.c: FUSE_USE_VERSION=319;LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS;fuse_parse_cmdline...
38/75 files checked 45% done
Checking lib/cuse_lowlevel.c ...
Checking lib/cuse_lowlevel.c: FUSE_USE_VERSION=319...
Checking lib/cuse_lowlevel.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking lib/cuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking lib/cuse_lowlevel.c: FUSE_USE_VERSION=319;__KERNEL__...
Checking lib/cuse_lowlevel.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
39/75 files checked 46% done
Checking lib/fuse_log.c ...
Checking lib/fuse_log.c: FUSE_USE_VERSION=319...
40/75 files checked 46% done
Checking lib/fuse_loop.c ...
Checking lib/fuse_loop.c: FUSE_USE_VERSION=319...
Checking lib/fuse_loop.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_loop.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse_loop.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_loop.c: FUSE_USE_VERSION=319;__KERNEL__;FUSE_USE_VERSION...
Checking lib/fuse_loop.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
41/75 files checked 46% done
Checking lib/fuse_loop_mt.c ...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319;__KERNEL__;FUSE_USE_VERSION...
Checking lib/fuse_loop_mt.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
42/75 files checked 47% done
Checking lib/fuse_misc.h ...
Checking lib/fuse_misc.h: FUSE_USE_VERSION=319...
Checking lib/fuse_misc.h: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIM...
Checking lib/fuse_misc.h: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/fuse_misc.h: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE;LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS...
Checking lib/fuse_misc.h: FUSE_USE_VERSION=319;LIBFUSE_BUILT_WITH_VERSIONED_SYMBOLS...
43/75 files checked 48% done
Checking lib/fuse_opt.c ...
Checking lib/fuse_opt.c: FUSE_USE_VERSION=319...
Checking lib/fuse_opt.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_opt.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse_opt.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_opt.c: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/fuse_opt.c: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE...
Checking lib/fuse_opt.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
44/75 files checked 48% done
Checking lib/fuse_signals.c ...
Checking lib/fuse_signals.c: FUSE_USE_VERSION=319...
Checking lib/fuse_signals.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_signals.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse_signals.c: FUSE_USE_VERSION=319;HAVE_BACKTRACE;FUSE_USE_VERSION...
Checking lib/fuse_signals.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_signals.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
45/75 files checked 49% done
Checking lib/fuse_uring_i.h ...
Checking lib/fuse_uring_i.h: FUSE_USE_VERSION=319...
Checking lib/fuse_uring_i.h: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_uring_i.h: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_uring_i.h: FUSE_USE_VERSION=319;HAVE_URING;FUSE_USE_VERSION...
Checking lib/fuse_uring_i.h: FUSE_USE_VERSION=319;__KERNEL__;FUSE_USE_VERSION...
Checking lib/fuse_uring_i.h: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
46/75 files checked 49% done
Checking lib/mount_bsd.c ...
Checking lib/mount_bsd.c: FUSE_USE_VERSION=319...
lib/mount_bsd.c:190:8: style: The scope of the variable 'ret' can be reduced. [variableScope]
   int ret = -1;
       ^
lib/mount_bsd.c:138:16: style: Variable 'dev' can be declared as pointer to const [constVariablePointer]
 char *fdnam, *dev;
               ^
lib/mount_bsd.c:261:64: style: Parameter 'mo' can be declared as pointer to const [constParameterPointer]
int fuse_kern_mount(const char *mountpoint, struct mount_opts *mo)
                                                               ^
lib/mount_bsd.c:190:12: style: Variable 'ret' is assigned a value that is never used. [unreadVariable]
   int ret = -1;
           ^
Checking lib/mount_bsd.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/mount_bsd.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/mount_bsd.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/mount_bsd.c: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/mount_bsd.c: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE...
Checking lib/mount_bsd.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
47/75 files checked 50% done
Checking lib/usdt.h ...
Checking lib/usdt.h: FUSE_USE_VERSION=319...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__LP64__...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__STDC_VERSION__...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__arm__...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__i386__...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__ia64__;__s390__;__s390x__...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__loongarch__...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__powerpc64__;__powerpc__...
Checking lib/usdt.h: FUSE_USE_VERSION=319;__powerpc__...
48/75 files checked 52% done
Checking lib/util.c ...
Checking lib/util.c: FUSE_USE_VERSION=319...
Checking lib/util.c: FUSE_USE_VERSION=319;FUSE_H_;FUSE_LOWLEVEL_H_...
Checking lib/util.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking lib/util.c: FUSE_USE_VERSION=319;HAVE_PTHREAD_SETNAME_NP...
Checking lib/util.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
49/75 files checked 52% done
Checking lib/fuse.c ...
Checking lib/fuse.c: FUSE_USE_VERSION=319...
lib/fuse.c:5025:30: style: Parameter 'version' can be declared as pointer to const [constParameterPointer]
     struct libfuse_version *version, void *user_data)
                             ^
Checking lib/fuse.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
lib/fuse.c:2971:19: warning: Uninitialized variable: &e [uninitvar]
 reply_entry(req, &e, err);
                  ^
lib/fuse.c:2945:6: note: Assuming condition is false
 if (!err) {
     ^
lib/fuse.c:2971:19: note: Uninitialized variable: &e
 reply_entry(req, &e, err);
                  ^
lib/fuse.c:2993:19: warning: Uninitialized variable: &e [uninitvar]
 reply_entry(req, &e, err);
                  ^
lib/fuse.c:2983:6: note: Assuming condition is false
 if (!err) {
     ^
lib/fuse.c:2993:19: note: Uninitialized variable: &e
 reply_entry(req, &e, err);
                  ^
lib/fuse.c:3076:19: warning: Uninitialized variable: &e [uninitvar]
 reply_entry(req, &e, err);
                  ^
lib/fuse.c:3066:6: note: Assuming condition is false
 if (!err) {
     ^
lib/fuse.c:3076:19: note: Uninitialized variable: &e
 reply_entry(req, &e, err);
                  ^
lib/fuse.c:3139:19: warning: Uninitialized variable: &e [uninitvar]
 reply_entry(req, &e, err);
                  ^
lib/fuse.c:3128:6: note: Assuming condition is false
 if (!err) {
     ^
lib/fuse.c:3139:19: note: Uninitialized variable: &e
 reply_entry(req, &e, err);
                  ^
Checking lib/fuse.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse.c: FUSE_USE_VERSION=319;HAVE_ICONV;FUSE_USE_VERSION...
Checking lib/fuse.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse.c: FUSE_USE_VERSION=319;HAVE_STATX;FUSE_USE_VERSION...
Checking lib/fuse.c: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/fuse.c: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE...
Checking lib/fuse.c: FUSE_USE_VERSION=319;HAVE_UTIMENSAT;FUSE_USE_VERSION...
Checking lib/fuse.c: FUSE_USE_VERSION=319;__FreeBSD__;FUSE_USE_VERSION...
Checking lib/fuse.c: FUSE_USE_VERSION=319;__FreeBSD__;__NetBSD__;FUSE_USE_VERSION...
Checking lib/fuse.c: FUSE_USE_VERSION=319;__KERNEL__;FUSE_USE_VERSION...
Checking lib/fuse.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
50/75 files checked 65% done
Checking lib/fuse_i.h ...
Checking lib/fuse_i.h: FUSE_USE_VERSION=319...
Checking lib/fuse_i.h: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_i.h: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse_i.h: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_i.h: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
51/75 files checked 66% done
Checking lib/fuse_lowlevel.c ...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319...
lib/fuse_lowlevel.c:1336:15: style: The scope of the variable 'i' can be reduced. [variableScope]
 unsigned int i;
              ^
lib/fuse_lowlevel.c:1445:31: style: The scope of the variable 'arg' can be reduced. [variableScope]
 const struct fuse_access_in *arg = op_in;
                              ^
lib/fuse_lowlevel.c:1481:14: style: The scope of the variable 'name' can be reduced. [variableScope]
 const char *name = in_payload;
             ^
lib/fuse_lowlevel.c:1506:14: style: The scope of the variable 'name' can be reduced. [variableScope]
 const char *name = in_payload;
             ^
lib/fuse_lowlevel.c:1530:14: style: The scope of the variable 'name' can be reduced. [variableScope]
 const char *name = in_payload;
             ^
lib/fuse_lowlevel.c:1548:14: style: The scope of the variable 'name' can be reduced. [variableScope]
 const char *name = in_payload;
             ^
lib/fuse_lowlevel.c:1606:32: style: The scope of the variable 'arg' can be reduced. [variableScope]
 const struct fuse_rename2_in *arg = op_in;
                               ^
lib/fuse_lowlevel.c:1676:14: style: The scope of the variable 'name' can be reduced. [variableScope]
 const char *name = in_payload;
             ^
lib/fuse_lowlevel.c:1761:14: style: The scope of the variable 'buf' can be reduced. [variableScope]
 const char *buf = in_payload;
             ^
lib/fuse_lowlevel.c:2094:33: style: The scope of the variable 'arg' can be reduced. [variableScope]
 const struct fuse_getxattr_in *arg = op_in;
                                ^
lib/fuse_lowlevel.c:2115:33: style: The scope of the variable 'arg' can be reduced. [variableScope]
 const struct fuse_getxattr_in *arg = inarg;
                                ^
lib/fuse_lowlevel.c:2132:14: style: The scope of the variable 'name' can be reduced. [variableScope]
 const char *name = in_payload;
             ^
lib/fuse_lowlevel.c:2342:29: style: The scope of the variable 'arg' can be reduced. [variableScope]
 const struct fuse_bmap_in *arg = op_in;
                            ^
lib/fuse_lowlevel.c:2359:14: style: The scope of the variable 'in_buf' can be reduced. [variableScope]
 const void *in_buf = in_payload;
             ^
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_PIPE2;O_CLOEXEC;HAVE_SPLICE;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_SPLICE;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_SPLICE;HAVE_VMSPLICE;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_STATX;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;USDT_ENABLED;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__KERNEL__;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__LP64__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__arm__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__i386__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__ia64__;__s390__;__s390x__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__loongarch__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__powerpc64__;__powerpc__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;__powerpc__...
Checking lib/fuse_lowlevel.c: FUSE_USE_VERSION=319;linux;FUSE_USE_VERSION...
52/75 files checked 78% done
Checking lib/helper.c ...
Checking lib/helper.c: FUSE_USE_VERSION=319...
Checking lib/helper.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/helper.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/helper.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/helper.c: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/helper.c: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE...
Checking lib/helper.c: FUSE_USE_VERSION=319;__FreeBSD__;FUSE_USE_VERSION...
Checking lib/helper.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
53/75 files checked 80% done
Checking lib/fuse_uring.c ...
Checking lib/fuse_uring.c: FUSE_USE_VERSION=319...
Checking lib/fuse_uring.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/fuse_uring.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/fuse_uring.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/fuse_uring.c: FUSE_USE_VERSION=319;__KERNEL__;FUSE_USE_VERSION...
Checking lib/fuse_uring.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
54/75 files checked 82% done
Checking lib/mount.c ...
Checking lib/mount.c: FUSE_USE_VERSION=319...
lib/mount.c:130:63: style: Parameter 'action' can be declared as pointer to const [constParameterPointer]
static int fusermount_posix_spawn(posix_spawn_file_actions_t *action,
                                                              ^
Checking lib/mount.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_;FUSE_USE_VERSION...
Checking lib/mount.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking lib/mount.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H;FUSE_USE_VERSION...
Checking lib/mount.c: FUSE_USE_VERSION=319;HAVE_STRUCT_STAT_ST_ATIMESPEC...
Checking lib/mount.c: FUSE_USE_VERSION=319;HAVE_SYMVER_ATTRIBUTE...
Checking lib/mount.c: FUSE_USE_VERSION=319;__NetBSD__;FUSE_USE_VERSION...
Checking lib/mount.c: FUSE_USE_VERSION=319;__STDC_VERSION__;FUSE_USE_VERSION...
55/75 files checked 84% done
Checking lib/mount_util.c ...
Checking lib/mount_util.c: FUSE_USE_VERSION=319...
Checking lib/mount_util.c: FUSE_USE_VERSION=319;__ANDROID__;__DragonFly__;__FreeBSD__;__NetBSD__...
Checking lib/mount_util.c: FUSE_USE_VERSION=319;__DragonFly__;__FreeBSD__;__FreeBSD_kernel__;__NetBSD__...
56/75 files checked 85% done
Checking lib/mount_util.h ...
Checking lib/mount_util.h: FUSE_USE_VERSION=319...
57/75 files checked 85% done
Checking lib/util.h ...
Checking lib/util.h: FUSE_USE_VERSION=319...
58/75 files checked 85% done
Checking test/hello.c ...
Checking test/hello.c: FUSE_USE_VERSION=319...
Checking test/hello.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/hello.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/hello.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
59/75 files checked 86% done
Checking test/readdir_inode.c ...
Checking test/readdir_inode.c: FUSE_USE_VERSION=319...
test/readdir_inode.c:31:12: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
    dent = readdir(dirp);
           ^
test/readdir_inode.c:47:16: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
        dent = readdir(dirp);
               ^
test/readdir_inode.c:17:20: style: Variable 'dent' can be declared as pointer to const [constVariablePointer]
    struct dirent* dent;
                   ^
60/75 files checked 86% done
Checking test/release_unlink_race.c ...
Checking test/release_unlink_race.c: FUSE_USE_VERSION=319...
test/release_unlink_race.c:66:56: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
        if(!getenv("RELEASEUNLINKRACE_DELAY_DISABLE")) usleep(100000);
                                                       ^
test/release_unlink_race.c:91:56: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
        if(!getenv("RELEASEUNLINKRACE_DELAY_DISABLE")) usleep(100000);
                                                       ^
Checking test/release_unlink_race.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/release_unlink_race.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/release_unlink_race.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
61/75 files checked 86% done
Checking test/stracedecode.c ...
Checking test/stracedecode.c: FUSE_USE_VERSION=319...
test/stracedecode.c:68:3: warning: %i in format string (no. 3) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint]
  printf("unique: %llu, opcode: %s (%i), nodeid: %lu, len: %i, insize: %i\n",
  ^
test/stracedecode.c:68:3: warning: %i in format string (no. 5) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint]
  printf("unique: %llu, opcode: %s (%i), nodeid: %lu, len: %i, insize: %i\n",
  ^
test/stracedecode.c:76:4: warning: %llu in format string (no. 1) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
   printf("-READ fh:%llu off:%llu siz:%u rfl:%u own:%llu fl:%u\n",
   ^
test/stracedecode.c:76:4: warning: %llu in format string (no. 2) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
   printf("-READ fh:%llu off:%llu siz:%u rfl:%u own:%llu fl:%u\n",
   ^
test/stracedecode.c:76:4: warning: %llu in format string (no. 5) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
   printf("-READ fh:%llu off:%llu siz:%u rfl:%u own:%llu fl:%u\n",
   ^
test/stracedecode.c:83:4: warning: %llu in format string (no. 1) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
   printf("-WRITE fh:%llu off:%llu siz:%u wfl:%u own:%llu fl:%u\n",
   ^
test/stracedecode.c:83:4: warning: %llu in format string (no. 2) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
   printf("-WRITE fh:%llu off:%llu siz:%u wfl:%u own:%llu fl:%u\n",
   ^
test/stracedecode.c:83:4: warning: %llu in format string (no. 5) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
   printf("-WRITE fh:%llu off:%llu siz:%u wfl:%u own:%llu fl:%u\n",
   ^
test/stracedecode.c:95:3: warning: %i in format string (no. 4) requires 'int' but the argument type is 'unsigned int'. [invalidPrintfArgType_sint]
  printf("   unique: %llu, error: %i (%s), len: %i, outsize: %i\n",
  ^
test/stracedecode.c:103:5: warning: %llu in format string (no. 1) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ATTR v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:103:5: warning: %llu in format string (no. 3) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ATTR v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:103:5: warning: %llu in format string (no. 4) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ATTR v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:103:5: warning: %llu in format string (no. 5) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ATTR v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:110:5: warning: %llu in format string (no. 1) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ENTRY nodeid:%llu v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:110:5: warning: %llu in format string (no. 2) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ENTRY nodeid:%llu v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:110:5: warning: %llu in format string (no. 4) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ENTRY nodeid:%llu v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:110:5: warning: %llu in format string (no. 5) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ENTRY nodeid:%llu v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:110:5: warning: %llu in format string (no. 6) requires 'unsigned long long' but the argument type is 'unsigned long'. [invalidPrintfArgType_uint]
    printf("+ENTRY nodeid:%llu v:%llu.%09u i:%llu s:%llu b:%llu\n",
    ^
test/stracedecode.c:178:14: warning: %x in format string (no. 1) requires 'unsigned int *' but the argument type is 'signed int *'. [invalidScanfArgType_int]
       res = scanf("%x", &val);
             ^
test/stracedecode.c:65:26: style: Variable 'in' can be declared as pointer to const [constVariablePointer]
  struct fuse_in_header *in = (struct fuse_in_header *) buf;
                         ^
test/stracedecode.c:75:25: style: Variable 'arg' can be declared as pointer to const [constVariablePointer]
   struct fuse_read_in *arg = (struct fuse_read_in *) buf;
                        ^
test/stracedecode.c:82:26: style: Variable 'arg' can be declared as pointer to const [constVariablePointer]
   struct fuse_write_in *arg = (struct fuse_write_in *) buf;
                         ^
test/stracedecode.c:92:27: style: Variable 'out' can be declared as pointer to const [constVariablePointer]
  struct fuse_out_header *out = (struct fuse_out_header *) buf;
                          ^
test/stracedecode.c:102:27: style: Variable 'arg' can be declared as pointer to const [constVariablePointer]
    struct fuse_attr_out *arg = (struct fuse_attr_out *) buf;
                          ^
test/stracedecode.c:109:28: style: Variable 'arg' can be declared as pointer to const [constVariablePointer]
    struct fuse_entry_out *arg = (struct fuse_entry_out *) buf;
                           ^
Checking test/stracedecode.c: FUSE_USE_VERSION=319;__KERNEL__...
62/75 files checked 86% done
Checking test/test_abi.c ...
Checking test/test_abi.c: FUSE_USE_VERSION=319...
Checking test/test_abi.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/test_abi.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/test_abi.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
63/75 files checked 86% done
Checking test/test_setattr.c ...
Checking test/test_setattr.c: FUSE_USE_VERSION=319...
test/test_setattr.c:142:12: warning: Assert statement calls a function which may have desired side effects: 'snprintf'. [assertWithSideEffect]
    assert(snprintf(fname, PATH_MAX, "%s/" FILE_NAME,
           ^
test/test_setattr.c:150:12: warning: Assert statement calls a function which may have desired side effects: 'fchmod'. [assertWithSideEffect]
    assert(fchmod(fd, 0600) == 0);
           ^
test/test_setattr.c:171:12: warning: Assert statement calls a function which may have desired side effects: 'pthread_create'. [assertWithSideEffect]
    assert(pthread_create(&fs_thread, NULL, run_fs, (void *)se) == 0);
           ^
test/test_setattr.c:150:19: warning: Either the condition 'fd==-1' is redundant or fchmod() argument nr 1 can have invalid value. The value is -1 but the valid values are '0:'. [invalidFunctionArg]
    assert(fchmod(fd, 0600) == 0);
                  ^
test/test_setattr.c:145:12: note: Assuming that condition 'fd==-1' is not redundant
    if (fd == -1) {
           ^
test/test_setattr.c:150:19: note: Invalid argument
    assert(fchmod(fd, 0600) == 0);
                  ^
test/test_setattr.c:151:11: warning: Either the condition 'fd==-1' is redundant or close() argument nr 1 can have invalid value. The value is -1 but the valid values are '0:'. [invalidFunctionArg]
    close(fd);
          ^
test/test_setattr.c:145:12: note: Assuming that condition 'fd==-1' is not redundant
    if (fd == -1) {
           ^
test/test_setattr.c:151:11: note: Invalid argument
    close(fd);
          ^
Checking test/test_setattr.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/test_setattr.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/test_setattr.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
Checking test/test_setattr.c: FUSE_USE_VERSION=319;__linux__...
64/75 files checked 87% done
Checking test/test_signals.c ...
Checking test/test_signals.c: FUSE_USE_VERSION=319...
test/test_signals.c:56:2: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
 usleep(2 * 1000 * 1000);
 ^
test/test_signals.c:56:18: error: Invalid usleep() argument nr 1. The value is 2000000 but the valid values are '0:999999'. [invalidFunctionArg]
 usleep(2 * 1000 * 1000);
                 ^
Checking test/test_signals.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/test_signals.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/test_signals.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
65/75 files checked 87% done
Checking test/test_syscalls.c ...
Checking test/test_syscalls.c: FUSE_USE_VERSION=319...
test/test_syscalls.c:420:8: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
  de = readdir(dp);
       ^
test/test_syscalls.c:794:8: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
  de = readdir(dp);
       ^
test/test_syscalls.c:806:8: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
  de = readdir(dp);
       ^
test/test_syscalls.c:811:8: portability: Non reentrant function 'readdir' called. For threadsafe applications it is recommended to use the reentrant replacement function 'readdir_r'. [readdirCalled]
  de = readdir(dp);
       ^
test/test_syscalls.c:984:8: style: Obsolescent function 'utime' called. It is recommended to use 'utimensat' instead. [utimeCalled]
 res = utime(testfile, &utm);
       ^
test/test_syscalls.c:1934:3: error: Resource leak: fd [resourceLeak]
  return -1;
  ^
test/test_syscalls.c:2038:3: error: Resource leak: fd [resourceLeak]
  return -1;
  ^
test/test_syscalls.c:2072:3: error: Resource leak: fd [resourceLeak]
  return -1;
  ^
test/test_syscalls.c:2083:3: error: Resource leak: fd [resourceLeak]
  return -1;
  ^
test/test_syscalls.c:2088:3: error: Resource leak: fd [resourceLeak]
  return -1;
  ^
test/test_syscalls.c:275:56: style: Parameter 'st' can be declared as pointer to const [constParameterPointer]
static int fcheck_stat(int fd, int flags, struct stat *st)
                                                       ^
Checking test/test_syscalls.c: FUSE_USE_VERSION=319;HAVE_COPY_FILE_RANGE...
Checking test/test_syscalls.c: FUSE_USE_VERSION=319;HAVE_STATX...
66/75 files checked 92% done
Checking test/test_want_conversion.c ...
Checking test/test_want_conversion.c: FUSE_USE_VERSION=319...
Checking test/test_want_conversion.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/test_want_conversion.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/test_want_conversion.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
67/75 files checked 93% done
Checking test/test_write_cache.c ...
Checking test/test_write_cache.c: FUSE_USE_VERSION=319...
test/test_write_cache.c:232:9: warning: Assert statement calls a function which may have desired side effects: 'read'. [assertWithSideEffect]
 assert(read(fd, buf, dsize) == dsize);
        ^
test/test_write_cache.c:235:9: warning: Assert statement calls a function which may have desired side effects: 'snprintf'. [assertWithSideEffect]
 assert(snprintf(fname, PATH_MAX, "%s/" FILE_NAME, mountpoint) > 0);
        ^
test/test_write_cache.c:245:10: warning: Assert statement calls a function which may have desired side effects: 'pthread_create'. [assertWithSideEffect]
  assert(pthread_create(&rofd_thread, NULL, close_rofd,
         ^
test/test_write_cache.c:252:10: warning: Assert statement calls a function which may have desired side effects: 'pwrite'. [assertWithSideEffect]
  assert(pwrite(fd, buf + off, iosize, off) == iosize);
         ^
test/test_write_cache.c:262:10: warning: Assert statement calls a function which may have desired side effects: 'pthread_join'. [assertWithSideEffect]
  assert(pthread_join(rofd_thread, NULL) == 0);
         ^
test/test_write_cache.c:285:9: warning: Assert statement calls a function which may have desired side effects: 'pthread_create'. [assertWithSideEffect]
 assert(pthread_create(&fs_thread, NULL, run_fs, (void *)se) == 0);
        ^
test/test_write_cache.c:294:9: warning: Assert statement calls a function which may have desired side effects: 'pthread_join'. [assertWithSideEffect]
 assert(pthread_join(fs_thread, NULL) == 0);
        ^
test/test_write_cache.c:170:3: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
  usleep(options.delay_ms * 1000);
  ^
test/test_write_cache.c:248:3: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
  usleep(options.delay_ms * 1000);
  ^
test/test_write_cache.c:249:2: error: Resource leak: rofd [resourceLeak]
 }
 ^
Checking test/test_write_cache.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/test_write_cache.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/test_write_cache.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
Checking test/test_write_cache.c: FUSE_USE_VERSION=319;__linux__...
68/75 files checked 93% done
Checking test/wrong_command.c ...
Checking test/wrong_command.c: FUSE_USE_VERSION=319...
Checking test/wrong_command.c: FUSE_USE_VERSION=319;MESON_IS_SUBPROJECT...
69/75 files checked 93% done
Checking test/test_teardown_watchdog.c ...
Checking test/test_teardown_watchdog.c: FUSE_USE_VERSION=319...
test/test_teardown_watchdog.c:71:2: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
 usleep(uta->delay_ms * 1000);
 ^
test/test_teardown_watchdog.c:165:2: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
 usleep(500 * 1000);
 ^
test/test_teardown_watchdog.c:180:3: style: Obsolescent function 'usleep' called. It is recommended to use 'nanosleep' or 'setitimer' instead. [usleepCalled]
  usleep(100 * 1000);
  ^
Checking test/test_teardown_watchdog.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking test/test_teardown_watchdog.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking test/test_teardown_watchdog.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
70/75 files checked 94% done
Checking util/fusermount.c ...
Checking util/fusermount.c: FUSE_USE_VERSION=319...
util/fusermount.c:185:22: portability: Non reentrant function 'getpwuid' called. For threadsafe applications it is recommended to use the reentrant replacement function 'getpwuid_r'. [getpwuidCalled]
 struct passwd *pw = getpwuid(getuid());
                     ^
util/fusermount.c:1328:12: warning: If memory allocation fails, then there is a possible null pointer dereference: x_mnt_opts [nullPointerOutOfMemory]
   strncat(x_mnt_opts, x_opts,
           ^
util/fusermount.c:1321:29: note: Assuming allocation function fails
   char *x_mnt_opts = calloc(1, x_mnt_opts_len);
                            ^
util/fusermount.c:1321:29: note: Assignment 'x_mnt_opts=calloc(1,x_mnt_opts_len)', assigned value is 0
   char *x_mnt_opts = calloc(1, x_mnt_opts_len);
                            ^
util/fusermount.c:1328:12: note: Null pointer dereference
   strncat(x_mnt_opts, x_opts,
           ^
util/fusermount.c:357:14: style: The scope of the variable 'mnt' can be reduced. [variableScope]
 const char *mnt = a[1];
             ^
util/fusermount.c:602:6: style: The scope of the variable 'n_mounts' can be reduced. [variableScope]
 int n_mounts = 0;
     ^
util/fusermount.c:609:20: style: Variable 'sm' can be declared as pointer to const [constVariablePointer]
 struct statmount *sm;
                   ^
util/fusermount.c:602:15: style: Variable 'n_mounts' is assigned a value that is never used. [unreadVariable]
 int n_mounts = 0;
              ^
util/fusermount.c:603:10: style: Variable 'ret' is assigned a value that is never used. [unreadVariable]
 int ret = 0;
         ^
Checking util/fusermount.c: FUSE_USE_VERSION=319;GETMNTENT_NEEDS_UNESCAPING...
Checking util/fusermount.c: FUSE_USE_VERSION=319;HAVE_CLOSE_RANGE...
Checking util/fusermount.c: FUSE_USE_VERSION=319;HAVE_CLOSE_RANGE;linux...
Checking util/fusermount.c: FUSE_USE_VERSION=319;HAVE_LISTMOUNT...
Checking util/fusermount.c: FUSE_USE_VERSION=319;IGNORE_MTAB...
Checking util/fusermount.c: FUSE_USE_VERSION=319;__ia64__...
71/75 files checked 98% done
Checking util/mount.fuse.c ...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319...
util/mount.fuse.c:314:10: portability: Non reentrant function 'strtok' called. For threadsafe applications it is recommended to use the reentrant replacement function 'strtok_r'. [strtokCalled]
   opt = strtok(opts, ",");
         ^
util/mount.fuse.c:348:11: portability: Non reentrant function 'strtok' called. For threadsafe applications it is recommended to use the reentrant replacement function 'strtok_r'. [strtokCalled]
    opt = strtok(NULL, ",");
          ^
util/mount.fuse.c:409:24: portability: Non reentrant function 'getpwnam' called. For threadsafe applications it is recommended to use the reentrant replacement function 'getpwnam_r'. [getpwnamCalled]
  struct passwd *pwd = getpwnam(setuid_name);
                       ^
util/mount.fuse.c:409:18: style: Variable 'pwd' can be declared as pointer to const [constVariablePointer]
  struct passwd *pwd = getpwnam(setuid_name);
                 ^
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;FUSE_LOWLEVEL_H_...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;FUSE_USE_VERSION=30...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;HAVE_LIBFUSE_PRIVATE_CONFIG_H...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;SECBIT_KEEP_CAPS;SECURE_KEEP_CAPS;linux...
util/mount.fuse.c:212:4: warning: %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'. [invalidPrintfArgType_uint]
   fprintf(stderr,
   ^
util/mount.fuse.c:218:4: warning: %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'. [invalidPrintfArgType_uint]
   fprintf(stderr,
   ^
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;SECBIT_KEEP_CAPS_LOCKED;SECURE_KEEP_CAPS_LOCKED;linux...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;SECBIT_NOROOT;SECURE_NOROOT;linux...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;SECBIT_NOROOT_LOCKED;SECURE_NOROOT_LOCKED;linux...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;SECBIT_NO_SETUID_FIXUP;SECURE_NO_SETUID_FIXUP;linux...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;SECBIT_NO_SETUID_FIXUP_LOCKED;SECURE_NO_SETUID_FIXUP_LOCKED;linux...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;__STDC_VERSION__...
Checking util/mount.fuse.c: FUSE_USE_VERSION=319;linux...
72/75 files checked 99% done
Checking build-x86_64/meson-private/sanitycheckc.c ...
Checking build-x86_64/meson-private/sanitycheckc.c: FUSE_USE_VERSION=319...
73/75 files checked 99% done
Checking build-x86_64/fuse_config.h ...
Checking build-x86_64/fuse_config.h: FUSE_USE_VERSION=319...
74/75 files checked 99% done
Checking build-x86_64/libfuse_config.h ...
Checking build-x86_64/libfuse_config.h: FUSE_USE_VERSION=319...
75/75 files checked 100% done
include/fuse.h:923:0: style: The function 'fuse_main_real' is never used. [unusedFunction]
static inline int fuse_main_real(int argc, char *argv[],
^
lib/fuse.c:370:0: style: The function 'list_add_head' is never used. [unusedFunction]
static inline void list_add_head(struct list_head *new, struct list_head *head)
^
lib/fuse.c:1819:0: style: The function 'fuse_fs_read' is never used. [unusedFunction]
int fuse_fs_read(struct fuse_fs *fs, const char *path, char *mem, size_t size,
^
lib/fuse.c:1924:0: style: The function 'fuse_fs_write' is never used. [unusedFunction]
int fuse_fs_write(struct fuse_fs *fs, const char *path, const char *mem,
^
lib/fuse.c:4718:0: style: The function 'fuse_loop_mt_31' is never used. [unusedFunction]
int fuse_loop_mt_31(struct fuse *f, int clone_fd)
^
lib/fuse.c:4735:0: style: The function 'fuse_exit' is never used. [unusedFunction]
void fuse_exit(struct fuse *f)
^
lib/fuse.c:4750:0: style: The function 'fuse_getgroups' is never used. [unusedFunction]
int fuse_getgroups(int size, gid_t list[])
^
lib/fuse.c:4759:0: style: The function 'fuse_interrupted' is never used. [unusedFunction]
int fuse_interrupted(void)
^
lib/fuse.c:5213:0: style: The function 'fuse_new_30' is never used. [unusedFunction]
struct fuse *fuse_new_30(struct fuse_args *args,
^
lib/fuse.c:5299:0: style: The function 'fuse_version' is never used. [unusedFunction]
int fuse_version(void)
^
lib/fuse_log.c:32:0: style: The function 'fuse_set_log_func' is never used. [unusedFunction]
void fuse_set_log_func(fuse_log_func_t func)
^
lib/fuse_log.c:49:0: style: The function 'fuse_log_enable_syslog' is never used. [unusedFunction]
void fuse_log_enable_syslog(const char *ident, int option, int facility)
^
lib/fuse_log.c:56:0: style: The function 'fuse_log_close_syslog' is never used. [unusedFunction]
void fuse_log_close_syslog(void)
^
lib/fuse_loop_mt.c:439:0: style: The function 'fuse_session_loop_mt_32' is never used. [unusedFunction]
int fuse_session_loop_mt_32(struct fuse_session *se, const struct fuse_loop_config_v1 *config_v1)
^
lib/fuse_loop_mt.c:463:0: style: The function 'fuse_session_loop_mt_31' is never used. [unusedFunction]
int fuse_session_loop_mt_31(struct fuse_session *se, int clone_fd)
^
lib/fuse_lowlevel.c:365:0: style: The function 'fuse_reply_iov' is never used. [unusedFunction]
int fuse_reply_iov(fuse_req_t req, const struct iovec *iov, int count)
^
lib/fuse_lowlevel.c:580:0: style: The function 'fuse_passthrough_open' is never used. [unusedFunction]
int fuse_passthrough_open(fuse_req_t req, int fd)
^
lib/fuse_lowlevel.c:594:0: style: The function 'fuse_passthrough_close' is never used. [unusedFunction]
int fuse_passthrough_close(fuse_req_t req, int backing_id)
^
lib/fuse_lowlevel.c:3240:0: style: The function 'fuse_lowlevel_notify_delete' is never used. [unusedFunction]
int fuse_lowlevel_notify_delete(struct fuse_session *se,
^
lib/fuse_lowlevel.c:3450:0: style: The function 'fuse_req_is_uring' is never used. [unusedFunction]
bool fuse_req_is_uring(fuse_req_t req)
^
lib/fuse_lowlevel.c:4177:0: style: The function 'fuse_session_receive_buf' is never used. [unusedFunction]
int fuse_session_receive_buf(struct fuse_session *se, struct fuse_buf *buf)
^
lib/fuse_lowlevel.c:4397:0: style: The function 'fuse_session_custom_io_30' is never used. [unusedFunction]
int fuse_session_custom_io_30(struct fuse_session *se,
^
lib/fuse_lowlevel.c:4464:0: style: The function 'fuse_session_fd' is never used. [unusedFunction]
int fuse_session_fd(const struct fuse_session *se)
^
lib/fuse_lowlevel.c:4561:0: style: The function 'fuse_session_reset' is never used. [unusedFunction]
void fuse_session_reset(struct fuse_session *se)
^
lib/fuse_opt.c:201:0: style: The function 'fuse_opt_match' is never used. [unusedFunction]
int fuse_opt_match(const struct fuse_opt *opts, const char *opt)
^
lib/fuse_signals.c:175:0: style: The function 'fuse_set_fail_signal_handlers' is never used. [unusedFunction]
int fuse_set_fail_signal_handlers(struct fuse_session *se)
^
lib/fuse_uring.c:209:0: style: The function 'fuse_req_get_payload' is never used. [unusedFunction]
int fuse_req_get_payload(fuse_req_t req, char **payload, size_t *payload_sz,
^
lib/helper.c:237:0: style: The function 'fuse_parse_cmdline_30' is never used. [unusedFunction]
int fuse_parse_cmdline_30(struct fuse_args *args,
^
lib/helper.c:422:0: style: The function 'fuse_apply_conn_info_opts' is never used. [unusedFunction]
void fuse_apply_conn_info_opts(const struct fuse_conn_info_opts *opts,
^
lib/helper.c:476:0: style: The function 'fuse_parse_conn_info_opts' is never used. [unusedFunction]
struct fuse_conn_info_opts* fuse_parse_conn_info_opts(struct fuse_args *args)
^
lib/cuse_lowlevel.c:147:0: style: The function 'cuse_lowlevel_new' should have static linkage since it is not used outside of its translation unit. [staticFunction]
struct fuse_session *cuse_lowlevel_new(struct fuse_args *args,
^
lib/cuse_lowlevel.c:273:0: style: The function 'cuse_lowlevel_setup' should have static linkage since it is not used outside of its translation unit. [staticFunction]
struct fuse_session *cuse_lowlevel_setup(int argc, char *argv[],
^
lib/cuse_lowlevel.c:344:0: style: The function 'cuse_lowlevel_teardown' should have static linkage since it is not used outside of its translation unit. [staticFunction]
void cuse_lowlevel_teardown(struct fuse_session *se)
^
lib/fuse.c:2253:0: style: The function 'fuse_fs_ioctl' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_fs_ioctl(struct fuse_fs *fs, const char *path, unsigned int cmd,
^
lib/fuse.c:2267:0: style: The function 'fuse_fs_poll' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_fs_poll(struct fuse_fs *fs, const char *path,
^
lib/fuse.c:2290:0: style: The function 'fuse_fs_fallocate' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_fs_fallocate(struct fuse_fs *fs, const char *path, int mode,
^
lib/fuse.c:2306:0: style: The function 'fuse_fs_copy_file_range' should have static linkage since it is not used outside of its translation unit. [staticFunction]
ssize_t fuse_fs_copy_file_range(struct fuse_fs *fs, const char *path_in,
^
lib/fuse.c:2377:0: style: The function 'fuse_fs_syncfs' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_fs_syncfs(struct fuse_fs *fs, const char *path)
^
lib/fuse.c:4526:0: style: The function 'fuse_clean_cache' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_clean_cache(struct fuse *f)
^
lib/fuse.c:4685:0: style: The function 'fuse_loop_mt_312' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_loop_mt_312(struct fuse *f, struct fuse_loop_config *config)
^
lib/fuse.c:5001:0: style: The function 'fuse_start_cleanup_thread' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_start_cleanup_thread(struct fuse *f)
^
lib/fuse.c:5009:0: style: The function 'fuse_stop_cleanup_thread' should have static linkage since it is not used outside of its translation unit. [staticFunction]
void fuse_stop_cleanup_thread(struct fuse *f)
^
lib/fuse.c:5196:0: style: The function 'fuse_new_31' should have static linkage since it is not used outside of its translation unit. [staticFunction]
struct fuse *fuse_new_31(struct fuse_args *args,
^
lib/fuse_loop_mt.c:497:0: style: The function 'fuse_loop_cfg_verify' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_loop_cfg_verify(const struct fuse_loop_config *config)
^
lib/fuse_opt.c:95:0: style: The function 'fuse_opt_insert_arg' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_opt_insert_arg(struct fuse_args *args, int pos, const char *arg)
^
lib/helper.c:208:0: style: The function 'fuse_parse_cmdline_312' should have static linkage since it is not used outside of its translation unit. [staticFunction]
int fuse_parse_cmdline_312(struct fuse_args *args,
^
nofile:0:0: information: Active checkers: 109/856 (use --checkers-report=<filename> to see details) [checkersReport]


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-05-02 16:30       ` Darrick J. Wong
@ 2026-05-02 16:58         ` Bernd Schubert
  2026-05-02 18:57           ` Darrick J. Wong
  0 siblings, 1 reply; 10+ messages in thread
From: Bernd Schubert @ 2026-05-02 16:58 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal



On 5/2/26 18:30, Darrick J. Wong wrote:
> On Sat, May 02, 2026 at 05:59:06PM +0200, Bernd Schubert wrote:
>>
>>
>> On 5/1/26 00:49, Darrick J. Wong wrote:
>>> On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
>>>> Hi Darrick,
>>>>
>>>> On 4/30/26 23:18, Darrick J. Wong wrote:
>>>>> Hi Bernd,
>>>>>
>>>>> Please pull this branch with changes for libfuse.
>>>>>
>>>>> As usual, I did a test-merge with the main upstream branch as of a few
>>>>> minutes ago, and didn't see any conflicts.  Please let me know if you
>>>>> encounter any problems.
>>>>
>>>> pushed to my github branch. BSD build fails with
>>>>
>>>> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
>>>> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
>>>> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
>>>
>>> Aha, that function got left out of the stub. :(
>>>
>>> Annoyingly, on Linux the build succeeds despite the missing symbol
>>> when I tweak meson so that it doesn't build the service stuff.  I would
>>> have thought that --no-undefined would have done that, but alas.
>>>
>>> Sorry about that too.  The following patch fixes it.
>>>
>>> diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
>>> index d34df3891a6e31..231b98423df628 100644
>>> --- i/lib/fuse_service_stub.c
>>> +++ w/lib/fuse_service_stub.c
>>> @@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
>>>  int fuse_service_accept(struct fuse_service **sfp)
>>>  {
>>>  	*sfp = NULL;
>>>  	return 0;
>>>  }
>>>  
>>> +bool fuse_service_can_allow_other(struct fuse_service *sf)
>>> +{
>>> +	return false;
>>> +}
>>> +
>>>  int fuse_service_append_args(struct fuse_service *sf,
>>>  			     struct fuse_args *existing_args)
>>>  {
>>>  	return -EOPNOTSUPP;
>>>  }
>>>  
>>>
>>>> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
>>>> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
>>>>
>>>>
>>>> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
>>>
>>> Not sure why checkpatch fails, this is what I got (Debian 13):
>>>
>>> $ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
>>> No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
>>> No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
>>> total: 0 errors, 0 warnings, 3908 lines checked
>>>
>>> Your patch has no obvious style problems and is ready for submission.
>>>
>>> NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY
>>>
>>> cppcheck had a few things to say, but none of it was about the changed
>>> lines.
>>>
>>>> report is funny
>>>>
>>>>> int mount_service_main(int argc, char *argv[])
>>>>> Warning
>>>>> Poorly documented large function
>>>>> Poorly documented function: fewer than 2% comments for a function of 113 lines.
>>>>> CodeQL
>>>
>>> Hrmm.  I guess I'll have to figure out how to get those things running.
>>> That said, the stuff in mount_service.c is internal to libfuse (i.e.
>>> it's not public library API) so I didn't comment them as intensely.
>>> Would you like more?
>>>
>>>> I think I'm going to merge my sync fuse init series tomorrow.
>>>
>>> Yay!
>>>
>>>> Are you ok if skip posting another version of the series?
>>>
>>>                ^ is there an "I" here?  e.g. "...if I skip posting..."?
>>>
>>> /My/ normal practice (from xfs) was to repost the series as it was
>>> merged, followed by an announcement.  That way the mailing list is a
>>> complete record of what was merged.  However, very very few people
>>> actually do that, even in the kernel.
>>>
>>> I'm ok with you not posting another version of the series.
>>>
>>>> Or do you prefer to review the recent changes and last piece I'm going
>>>> to do tomorrow?
>>>
>>> Nah, just merge it.  I'll look over the changes once it's in the branch
>>> and if there's anything weird, you or I or anyone else can send patches.
>>> As long as you're not planning to tag it as a release, nothing's set in
>>> stone.
>>>
>>>> Basically my goal is to rebase your series against it immediately and
>>>> to merge your series during the next few days.
>>>
>>> <nod> Let me know what you want changed, I'll be around since I am not
>>> travelling anywhere for a couple of weeks. :)
>>>
>>> I can reflow changes into the patchset, or if you'd prefer, I can add
>>> them as new patches that would go on the end of the series.
>>>
>>
>> Hi Darrick,
>>
>> eventually merged my patches and made a quick rebase and conflict 
>> resolving with your branch. Github still reports plenty of issues ;)
>>
>> Could you fix all of the checkpatch isssues? This one shows plenty
>> "util: hoist the fuse.conf parsing and setuid mode enforcement code"
>>
>> bschubert2@imesrv6 libfuse.git>stg series
>> + mount_service-add-systemd
>> + mount_service-create-high
>> + mount_service-use-the-new
>> + mount_service-update-mtab
>>> util-hoist-the-fuse.conf
>> - util-fix-checkpatch-complaints
>> - mount_service-enable
>> - mount.fuse3-integrate-systemd
>> - mount_service-allow
>> - example-service_ll-create-a
>> - example-service-create-a
>> - nullfs-support-fuse-systemd
>> - meson-show-feature-summary
>> bschubert2@imesrv6 libfuse.git>.github/workflows/run-checkpatch.sh 
>> No typos will be found - file '/home/bschubert2/src/libfuse/libfuse.git/spelling.txt': No such file or directory
>> No structs that should be const will be found - file '/home/bschubert2/src/libfuse/libfuse.git/const_structs.checkpatch': No such file or directory
>> ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
>> #61: FILE: util/fuser_conf.c:33:
>> +int user_allow_other = 0;
>>
>> WARNING:LINE_SPACING: Missing a blank line after declarations
>> #74: FILE: util/fuser_conf.c:46:
>> +	char *dest = buf;
>> +	while (1) {
> 
> Oh!  The checkpatch fixes are all in the next commit
> "util-fix-checkpatch-complaints".  I kept the checkpatch fixes as a
> separate commit so that the hoist change can be inspected more easily.

That is not going to work, the script it set up to check every commit in
the PR branch.

> 
> (XFS practice is to have separate patches for moving the code and
> cleaning it up)
> 
>> ...
>>
>> I don't have a strong opinion about these two above - feel 
>> free to disable them. However, in order to merge it, it would
>> be good to run without any checkpatch report.
>> And everything that cppcheck and gcc-checker reports, definitely 
>> need to be fixed.
> 
> Hrm, should I try to fix the things that cppcheck complains about in
> HEAD?  There's an awful lot of them...
> 
> (oh, I see you pushed to master, I'll go rebase now)

I had already rebased:

https://github.com/bsbernd/libfuse/tree/fuse-service-container





^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-05-02 16:58         ` Bernd Schubert
@ 2026-05-02 18:57           ` Darrick J. Wong
  0 siblings, 0 replies; 10+ messages in thread
From: Darrick J. Wong @ 2026-05-02 18:57 UTC (permalink / raw)
  To: Bernd Schubert
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal

On Sat, May 02, 2026 at 06:58:30PM +0200, Bernd Schubert wrote:
> 
> 
> On 5/2/26 18:30, Darrick J. Wong wrote:
> > On Sat, May 02, 2026 at 05:59:06PM +0200, Bernd Schubert wrote:
> >>
> >>
> >> On 5/1/26 00:49, Darrick J. Wong wrote:
> >>> On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
> >>>> Hi Darrick,
> >>>>
> >>>> On 4/30/26 23:18, Darrick J. Wong wrote:
> >>>>> Hi Bernd,
> >>>>>
> >>>>> Please pull this branch with changes for libfuse.
> >>>>>
> >>>>> As usual, I did a test-merge with the main upstream branch as of a few
> >>>>> minutes ago, and didn't see any conflicts.  Please let me know if you
> >>>>> encounter any problems.
> >>>>
> >>>> pushed to my github branch. BSD build fails with
> >>>>
> >>>> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
> >>>> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
> >>>> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
> >>>
> >>> Aha, that function got left out of the stub. :(
> >>>
> >>> Annoyingly, on Linux the build succeeds despite the missing symbol
> >>> when I tweak meson so that it doesn't build the service stuff.  I would
> >>> have thought that --no-undefined would have done that, but alas.
> >>>
> >>> Sorry about that too.  The following patch fixes it.
> >>>
> >>> diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
> >>> index d34df3891a6e31..231b98423df628 100644
> >>> --- i/lib/fuse_service_stub.c
> >>> +++ w/lib/fuse_service_stub.c
> >>> @@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
> >>>  int fuse_service_accept(struct fuse_service **sfp)
> >>>  {
> >>>  	*sfp = NULL;
> >>>  	return 0;
> >>>  }
> >>>  
> >>> +bool fuse_service_can_allow_other(struct fuse_service *sf)
> >>> +{
> >>> +	return false;
> >>> +}
> >>> +
> >>>  int fuse_service_append_args(struct fuse_service *sf,
> >>>  			     struct fuse_args *existing_args)
> >>>  {
> >>>  	return -EOPNOTSUPP;
> >>>  }
> >>>  
> >>>
> >>>> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
> >>>> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
> >>>>
> >>>>
> >>>> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
> >>>
> >>> Not sure why checkpatch fails, this is what I got (Debian 13):
> >>>
> >>> $ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
> >>> No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
> >>> No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
> >>> total: 0 errors, 0 warnings, 3908 lines checked
> >>>
> >>> Your patch has no obvious style problems and is ready for submission.
> >>>
> >>> NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY
> >>>
> >>> cppcheck had a few things to say, but none of it was about the changed
> >>> lines.
> >>>
> >>>> report is funny
> >>>>
> >>>>> int mount_service_main(int argc, char *argv[])
> >>>>> Warning
> >>>>> Poorly documented large function
> >>>>> Poorly documented function: fewer than 2% comments for a function of 113 lines.
> >>>>> CodeQL
> >>>
> >>> Hrmm.  I guess I'll have to figure out how to get those things running.
> >>> That said, the stuff in mount_service.c is internal to libfuse (i.e.
> >>> it's not public library API) so I didn't comment them as intensely.
> >>> Would you like more?
> >>>
> >>>> I think I'm going to merge my sync fuse init series tomorrow.
> >>>
> >>> Yay!
> >>>
> >>>> Are you ok if skip posting another version of the series?
> >>>
> >>>                ^ is there an "I" here?  e.g. "...if I skip posting..."?
> >>>
> >>> /My/ normal practice (from xfs) was to repost the series as it was
> >>> merged, followed by an announcement.  That way the mailing list is a
> >>> complete record of what was merged.  However, very very few people
> >>> actually do that, even in the kernel.
> >>>
> >>> I'm ok with you not posting another version of the series.
> >>>
> >>>> Or do you prefer to review the recent changes and last piece I'm going
> >>>> to do tomorrow?
> >>>
> >>> Nah, just merge it.  I'll look over the changes once it's in the branch
> >>> and if there's anything weird, you or I or anyone else can send patches.
> >>> As long as you're not planning to tag it as a release, nothing's set in
> >>> stone.
> >>>
> >>>> Basically my goal is to rebase your series against it immediately and
> >>>> to merge your series during the next few days.
> >>>
> >>> <nod> Let me know what you want changed, I'll be around since I am not
> >>> travelling anywhere for a couple of weeks. :)
> >>>
> >>> I can reflow changes into the patchset, or if you'd prefer, I can add
> >>> them as new patches that would go on the end of the series.
> >>>
> >>
> >> Hi Darrick,
> >>
> >> eventually merged my patches and made a quick rebase and conflict 
> >> resolving with your branch. Github still reports plenty of issues ;)
> >>
> >> Could you fix all of the checkpatch isssues? This one shows plenty
> >> "util: hoist the fuse.conf parsing and setuid mode enforcement code"
> >>
> >> bschubert2@imesrv6 libfuse.git>stg series
> >> + mount_service-add-systemd
> >> + mount_service-create-high
> >> + mount_service-use-the-new
> >> + mount_service-update-mtab
> >>> util-hoist-the-fuse.conf
> >> - util-fix-checkpatch-complaints
> >> - mount_service-enable
> >> - mount.fuse3-integrate-systemd
> >> - mount_service-allow
> >> - example-service_ll-create-a
> >> - example-service-create-a
> >> - nullfs-support-fuse-systemd
> >> - meson-show-feature-summary
> >> bschubert2@imesrv6 libfuse.git>.github/workflows/run-checkpatch.sh 
> >> No typos will be found - file '/home/bschubert2/src/libfuse/libfuse.git/spelling.txt': No such file or directory
> >> No structs that should be const will be found - file '/home/bschubert2/src/libfuse/libfuse.git/const_structs.checkpatch': No such file or directory
> >> ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
> >> #61: FILE: util/fuser_conf.c:33:
> >> +int user_allow_other = 0;
> >>
> >> WARNING:LINE_SPACING: Missing a blank line after declarations
> >> #74: FILE: util/fuser_conf.c:46:
> >> +	char *dest = buf;
> >> +	while (1) {
> > 
> > Oh!  The checkpatch fixes are all in the next commit
> > "util-fix-checkpatch-complaints".  I kept the checkpatch fixes as a
> > separate commit so that the hoist change can be inspected more easily.
> 
> That is not going to work, the script it set up to check every commit in
> the PR branch.

In that case, please just squash them together with:

$ stg squash -n util-hoist-the-fuse.conf util-hoist-the-fuse.conf util-fix-checkpatch-complaints

> > 
> > (XFS practice is to have separate patches for moving the code and
> > cleaning it up)
> > 
> >> ...
> >>
> >> I don't have a strong opinion about these two above - feel 
> >> free to disable them. However, in order to merge it, it would
> >> be good to run without any checkpatch report.
> >> And everything that cppcheck and gcc-checker reports, definitely 
> >> need to be fixed.
> > 
> > Hrm, should I try to fix the things that cppcheck complains about in
> > HEAD?  There's an awful lot of them...
> > 
> > (oh, I see you pushed to master, I'll go rebase now)
> 
> I had already rebased:
> 
> https://github.com/bsbernd/libfuse/tree/fuse-service-container

Oh!  Ok, I'll rebase against that, then.

--D

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-05-02 16:26       ` Bernd Schubert
@ 2026-05-02 19:05         ` Darrick J. Wong
  2026-05-02 19:51           ` Bernd Schubert
  0 siblings, 1 reply; 10+ messages in thread
From: Darrick J. Wong @ 2026-05-02 19:05 UTC (permalink / raw)
  To: Bernd Schubert
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal

On Sat, May 02, 2026 at 06:26:16PM +0200, Bernd Schubert wrote:
> 
> 
> On 5/2/26 17:59, Bernd Schubert wrote:
> > 
> > 
> > On 5/1/26 00:49, Darrick J. Wong wrote:
> >> On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
> >>> Hi Darrick,
> >>>
> >>> On 4/30/26 23:18, Darrick J. Wong wrote:
> >>>> Hi Bernd,
> >>>>
> >>>> Please pull this branch with changes for libfuse.
> >>>>
> >>>> As usual, I did a test-merge with the main upstream branch as of a few
> >>>> minutes ago, and didn't see any conflicts.  Please let me know if you
> >>>> encounter any problems.
> >>>
> >>> pushed to my github branch. BSD build fails with
> >>>
> >>> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
> >>> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
> >>> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
> >>
> >> Aha, that function got left out of the stub. :(
> >>
> >> Annoyingly, on Linux the build succeeds despite the missing symbol
> >> when I tweak meson so that it doesn't build the service stuff.  I would
> >> have thought that --no-undefined would have done that, but alas.
> >>
> >> Sorry about that too.  The following patch fixes it.
> >>
> >> diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
> >> index d34df3891a6e31..231b98423df628 100644
> >> --- i/lib/fuse_service_stub.c
> >> +++ w/lib/fuse_service_stub.c
> >> @@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
> >>  int fuse_service_accept(struct fuse_service **sfp)
> >>  {
> >>  	*sfp = NULL;
> >>  	return 0;
> >>  }
> >>  
> >> +bool fuse_service_can_allow_other(struct fuse_service *sf)
> >> +{
> >> +	return false;
> >> +}
> >> +
> >>  int fuse_service_append_args(struct fuse_service *sf,
> >>  			     struct fuse_args *existing_args)
> >>  {
> >>  	return -EOPNOTSUPP;
> >>  }
> >>  
> >>
> >>> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
> >>> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
> >>>
> >>>
> >>> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
> >>
> >> Not sure why checkpatch fails, this is what I got (Debian 13):
> >>
> >> $ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
> >> No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
> >> No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
> >> total: 0 errors, 0 warnings, 3908 lines checked
> >>
> >> Your patch has no obvious style problems and is ready for submission.
> >>
> >> NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY
> >>
> >> cppcheck had a few things to say, but none of it was about the changed
> >> lines.
> >>
> >>> report is funny
> >>>
> >>>> int mount_service_main(int argc, char *argv[])
> >>>> Warning
> >>>> Poorly documented large function
> >>>> Poorly documented function: fewer than 2% comments for a function of 113 lines.
> >>>> CodeQL
> >>
> >> Hrmm.  I guess I'll have to figure out how to get those things running.
> >> That said, the stuff in mount_service.c is internal to libfuse (i.e.
> >> it's not public library API) so I didn't comment them as intensely.
> >> Would you like more?
> >>
> >>> I think I'm going to merge my sync fuse init series tomorrow.
> >>
> >> Yay!
> >>
> >>> Are you ok if skip posting another version of the series?
> >>
> >>                ^ is there an "I" here?  e.g. "...if I skip posting..."?
> >>
> >> /My/ normal practice (from xfs) was to repost the series as it was
> >> merged, followed by an announcement.  That way the mailing list is a
> >> complete record of what was merged.  However, very very few people
> >> actually do that, even in the kernel.
> >>
> >> I'm ok with you not posting another version of the series.
> >>
> >>> Or do you prefer to review the recent changes and last piece I'm going
> >>> to do tomorrow?
> >>
> >> Nah, just merge it.  I'll look over the changes once it's in the branch
> >> and if there's anything weird, you or I or anyone else can send patches.
> >> As long as you're not planning to tag it as a release, nothing's set in
> >> stone.
> >>
> >>> Basically my goal is to rebase your series against it immediately and
> >>> to merge your series during the next few days.
> >>
> >> <nod> Let me know what you want changed, I'll be around since I am not
> >> travelling anywhere for a couple of weeks. :)
> >>
> >> I can reflow changes into the patchset, or if you'd prefer, I can add
> >> them as new patches that would go on the end of the series.
> >>
> > 
> > Hi Darrick,
> > 
> > eventually merged my patches and made a quick rebase and conflict 
> > resolving with your branch. Github still reports plenty of issues ;)
> > 
> > Could you fix all of the checkpatch isssues? This one shows plenty
> > "util: hoist the fuse.conf parsing and setuid mode enforcement code"
> > 
> > bschubert2@imesrv6 libfuse.git>stg series
> > + mount_service-add-systemd
> > + mount_service-create-high
> > + mount_service-use-the-new
> > + mount_service-update-mtab
> >> util-hoist-the-fuse.conf
> > - util-fix-checkpatch-complaints
> > - mount_service-enable
> > - mount.fuse3-integrate-systemd
> > - mount_service-allow
> > - example-service_ll-create-a
> > - example-service-create-a
> > - nullfs-support-fuse-systemd
> > - meson-show-feature-summary
> > bschubert2@imesrv6 libfuse.git>.github/workflows/run-checkpatch.sh 
> > No typos will be found - file '/home/bschubert2/src/libfuse/libfuse.git/spelling.txt': No such file or directory
> > No structs that should be const will be found - file '/home/bschubert2/src/libfuse/libfuse.git/const_structs.checkpatch': No such file or directory
> > ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
> > #61: FILE: util/fuser_conf.c:33:
> > +int user_allow_other = 0;
> > 
> > WARNING:LINE_SPACING: Missing a blank line after declarations
> > #74: FILE: util/fuser_conf.c:46:
> > +	char *dest = buf;
> > +	while (1) {
> > 
> > ...
> > 
> > I don't have a strong opinion about these two above - feel 
> > free to disable them. However, in order to merge it, it would
> > be good to run without any checkpatch report.
> > And everything that cppcheck and gcc-checker reports, definitely 
> > need to be fixed.
> 
> Basically
> 
> cd <$FUSEDIR>
> BUILDDIR="build-without-examples"
> mkdir -p ${BUILDDIR}
> meson setup ${BUILDDIR} -Dexamples=false 
> ninja -C ${BUILDDIR}
> ./.github/workflows/codechecker.sh --gcc --codechecker --build-dir ${BUILDDIR}
> 
> gcc reports are starting here
> 
> bschubert2@imesrv6 libfuse.git>stg series
> + mount_service-add-systemd
> + mount_service-create-high
> + mount_service-use-the-new
> + mount_service-update-mtab
> + util-hoist-the-fuse.conf
> + util-fix-checkpatch-complaints
> + mount_service-enable
> > mount.fuse3-integrate-systemd
> 
> 
> bschubert2@imesrv6 libfuse.git>git show |head -n5
> commit f908bb1504eca167e156671dde957c2e7192b7d2
> Author: Darrick J. Wong <djwong@kernel.org>
> Date:   Wed Mar 4 13:48:55 2026 -0800
> 
>     mount.fuse3: integrate systemd service startup
> 
> 
> ---==== Severity Statistics ====----
> ----------------------------
> Severity | Number of reports
> ----------------------------
> MEDIUM   |                 1
> ----------------------------
> ----=================----
> 
> ----==== Checker Statistics ====----
> -----------------------------------------------------
> Checker name           | Severity | Number of reports
> -----------------------------------------------------
> gcc-deref-before-check | MEDIUM   |                 1

Oh, that's concerning.  Could you figure out exactly what it's
complaining about and send that to me, please?

--D

> -----------------------------------------------------
> ----=================----
> 
> ----==== File Statistics ====----
> --------------------------------
> File name    | Number of reports
> --------------------------------
> mount.fuse.c |                 1
> --------------------------------
> ----=================----
> 
> ----======== Summary ========----
> ----------------------------------------------
> Number of processed analyzer result files | 45
> Number of analyzer reports                | 1 
> ----------------------------------------------
> ----=================----
> 
> To view statistics in a browser run:
> > firefox /home/bschubert2/src/libfuse/libfuse.git/build-without-examples/codechecker-html/statistics.html
> 
> To view the results in a browser run:
> > firefox /home/bschubert2/src/libfuse/libfuse.git/build-without-examples/codechecker-html/index.html
> [INFO 2026-05-02 18:25] - ----==== Summary ====----
> [INFO 2026-05-02 18:25] - Up-to-date analysis results
> [INFO 2026-05-02 18:25] -   gcc: 37
> [INFO 2026-05-02 18:25] - Outdated analysis results
> [INFO 2026-05-02 18:25] - Failed to analyze
> [INFO 2026-05-02 18:25] - Missing analysis results
> [INFO 2026-05-02 18:25] -   clangsa: 37
> [INFO 2026-05-02 18:25] -   clang-tidy: 37
> [INFO 2026-05-02 18:25] -   cppcheck: 37
> [INFO 2026-05-02 18:25] -   infer: 37
> [INFO 2026-05-02 18:25] - Total analyzed compilation commands: 45
> [INFO 2026-05-02 18:25] - Total available compilation commands: 45
> [INFO 2026-05-02 18:25] - ----=================----
> bschubert2@imesrv6 libfuse.git>
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [GIT PULL v5.1] libfuse: run fuse servers as a contained service
  2026-05-02 19:05         ` Darrick J. Wong
@ 2026-05-02 19:51           ` Bernd Schubert
  0 siblings, 0 replies; 10+ messages in thread
From: Bernd Schubert @ 2026-05-02 19:51 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: fuse-devel, joannelkoong, linux-ext4, linux-fsdevel, miklos, neal



On 5/2/26 21:05, Darrick J. Wong wrote:
> On Sat, May 02, 2026 at 06:26:16PM +0200, Bernd Schubert wrote:
>>
>>
>> On 5/2/26 17:59, Bernd Schubert wrote:
>>>
>>>
>>> On 5/1/26 00:49, Darrick J. Wong wrote:
>>>> On Thu, Apr 30, 2026 at 11:34:06PM +0200, Bernd Schubert wrote:
>>>>> Hi Darrick,
>>>>>
>>>>> On 4/30/26 23:18, Darrick J. Wong wrote:
>>>>>> Hi Bernd,
>>>>>>
>>>>>> Please pull this branch with changes for libfuse.
>>>>>>
>>>>>> As usual, I did a test-merge with the main upstream branch as of a few
>>>>>> minutes ago, and didn't see any conflicts.  Please let me know if you
>>>>>> encounter any problems.
>>>>>
>>>>> pushed to my github branch. BSD build fails with
>>>>>
>>>>> 2026-04-30T21:25:16.3874802Z FAILED: [code=1] lib/libfuse3.so.3.19.0 
>>>>> 2026-04-30T21:25:16.3906762Z cc  -o lib/libfuse3.so.3.19.0 lib/libfuse3.so.3.19.0.p/fuse.c.o lib/libfuse3.so.3.19.0.p/fuse_loop.c.o lib/libfuse3.so.3.19.0.p/fuse_loop_mt.c.o lib/libfuse3.so.3.19.0.p/fuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/fuse_opt.c.o lib/libfuse3.so.3.19.0.p/fuse_signals.c.o lib/libfuse3.so.3.19.0.p/buffer.c.o lib/libfuse3.so.3.19.0.p/cuse_lowlevel.c.o lib/libfuse3.so.3.19.0.p/helper.c.o lib/libfuse3.so.3.19.0.p/modules_subdir.c.o lib/libfuse3.so.3.19.0.p/mount_util.c.o lib/libfuse3.so.3.19.0.p/fuse_log.c.o lib/libfuse3.so.3.19.0.p/compat.c.o lib/libfuse3.so.3.19.0.p/util.c.o lib/libfuse3.so.3.19.0.p/mount_bsd.c.o lib/libfuse3.so.3.19.0.p/fuse_service_stub.c.o lib/libfuse3.so.3.19.0.p/modules_iconv.c.o -Wl,--as-needed -Wl,--no-undefined -shared -fPIC -Wl,-soname,libfuse3.so.4 -Wl,--version-script,/home/runner/work/libfuse/libfuse/lib/fuse_versionscript -pthread -Wl,--start-group -ldl -lrt -Wl,--end-group
>>>>> 2026-04-30T21:25:16.3939590Z ld: error: version script assignment of 'FUSE_3.19' to symbol 'fuse_service_can_allow_other' failed: symbol not defined
>>>>
>>>> Aha, that function got left out of the stub. :(
>>>>
>>>> Annoyingly, on Linux the build succeeds despite the missing symbol
>>>> when I tweak meson so that it doesn't build the service stuff.  I would
>>>> have thought that --no-undefined would have done that, but alas.
>>>>
>>>> Sorry about that too.  The following patch fixes it.
>>>>
>>>> diff --git i/lib/fuse_service_stub.c w/lib/fuse_service_stub.c
>>>> index d34df3891a6e31..231b98423df628 100644
>>>> --- i/lib/fuse_service_stub.c
>>>> +++ w/lib/fuse_service_stub.c
>>>> @@ -49,12 +49,17 @@ int fuse_service_send_goodbye(struct fuse_service *sf, int error)
>>>>  int fuse_service_accept(struct fuse_service **sfp)
>>>>  {
>>>>  	*sfp = NULL;
>>>>  	return 0;
>>>>  }
>>>>  
>>>> +bool fuse_service_can_allow_other(struct fuse_service *sf)
>>>> +{
>>>> +	return false;
>>>> +}
>>>> +
>>>>  int fuse_service_append_args(struct fuse_service *sf,
>>>>  			     struct fuse_args *existing_args)
>>>>  {
>>>>  	return -EOPNOTSUPP;
>>>>  }
>>>>  
>>>>
>>>>> 2026-04-30T21:25:16.3951874Z cc: error: linker command failed with exit code 1 (use -v to see invocation)
>>>>> 2026-04-30T21:25:16.4291582Z [44/82] cc -Itest/test_teardown_watchdog.p -Itest -I../test -Iinclude -I../include -Ilib -I../lib -I. -I.. -fdiagnostics-color=always -
>>>>>
>>>>>
>>>>> checkpatch, CodeChecker-cppcheck, CodeChecker-gcc also all fail. This CodeQL
>>>>
>>>> Not sure why checkpatch fails, this is what I got (Debian 13):
>>>>
>>>> $ git diff origin/master.. | ./checkpatch.pl --max-line-length=100 --no-tree --ignore MAINTAINERS,SPDX_LICENSE_TAG,COMMIT_MESSAGE,FILE_PATH_CHANGES,EMAIL_SUBJECT,AVOID_EXTERNS,GIT_COMMIT_ID,ENOSYS_SYSCALL,ENOSYS,FROM_SIGN_OFF_MISMATCH,QUOTED_COMMIT_ID,,PREFER_ATTRIBUTE_ALWAYS_UNUSED,PREFER_DEFINED_ATTRIBUTE_MACRO,STRCPY,STRNCPY -
>>>> No typos will be found - file '/storage/home/djwong/cdev/work/libfuse/spelling.txt': No such file or directory
>>>> No structs that should be const will be found - file '/storage/home/djwong/cdev/work/libfuse/const_structs.checkpatch': No such file or directory
>>>> total: 0 errors, 0 warnings, 3908 lines checked
>>>>
>>>> Your patch has no obvious style problems and is ready for submission.
>>>>
>>>> NOTE: Ignored message types: AVOID_EXTERNS COMMIT_MESSAGE EMAIL_SUBJECT ENOSYS ENOSYS_SYSCALL FILE_PATH_CHANGES FROM_SIGN_OFF_MISMATCH GIT_COMMIT_ID MAINTAINERS PREFER_ATTRIBUTE_ALWAYS_UNUSED PREFER_DEFINED_ATTRIBUTE_MACRO QUOTED_COMMIT_ID SPDX_LICENSE_TAG STRCPY STRNCPY
>>>>
>>>> cppcheck had a few things to say, but none of it was about the changed
>>>> lines.
>>>>
>>>>> report is funny
>>>>>
>>>>>> int mount_service_main(int argc, char *argv[])
>>>>>> Warning
>>>>>> Poorly documented large function
>>>>>> Poorly documented function: fewer than 2% comments for a function of 113 lines.
>>>>>> CodeQL
>>>>
>>>> Hrmm.  I guess I'll have to figure out how to get those things running.
>>>> That said, the stuff in mount_service.c is internal to libfuse (i.e.
>>>> it's not public library API) so I didn't comment them as intensely.
>>>> Would you like more?
>>>>
>>>>> I think I'm going to merge my sync fuse init series tomorrow.
>>>>
>>>> Yay!
>>>>
>>>>> Are you ok if skip posting another version of the series?
>>>>
>>>>                ^ is there an "I" here?  e.g. "...if I skip posting..."?
>>>>
>>>> /My/ normal practice (from xfs) was to repost the series as it was
>>>> merged, followed by an announcement.  That way the mailing list is a
>>>> complete record of what was merged.  However, very very few people
>>>> actually do that, even in the kernel.
>>>>
>>>> I'm ok with you not posting another version of the series.
>>>>
>>>>> Or do you prefer to review the recent changes and last piece I'm going
>>>>> to do tomorrow?
>>>>
>>>> Nah, just merge it.  I'll look over the changes once it's in the branch
>>>> and if there's anything weird, you or I or anyone else can send patches.
>>>> As long as you're not planning to tag it as a release, nothing's set in
>>>> stone.
>>>>
>>>>> Basically my goal is to rebase your series against it immediately and
>>>>> to merge your series during the next few days.
>>>>
>>>> <nod> Let me know what you want changed, I'll be around since I am not
>>>> travelling anywhere for a couple of weeks. :)
>>>>
>>>> I can reflow changes into the patchset, or if you'd prefer, I can add
>>>> them as new patches that would go on the end of the series.
>>>>
>>>
>>> Hi Darrick,
>>>
>>> eventually merged my patches and made a quick rebase and conflict 
>>> resolving with your branch. Github still reports plenty of issues ;)
>>>
>>> Could you fix all of the checkpatch isssues? This one shows plenty
>>> "util: hoist the fuse.conf parsing and setuid mode enforcement code"
>>>
>>> bschubert2@imesrv6 libfuse.git>stg series
>>> + mount_service-add-systemd
>>> + mount_service-create-high
>>> + mount_service-use-the-new
>>> + mount_service-update-mtab
>>>> util-hoist-the-fuse.conf
>>> - util-fix-checkpatch-complaints
>>> - mount_service-enable
>>> - mount.fuse3-integrate-systemd
>>> - mount_service-allow
>>> - example-service_ll-create-a
>>> - example-service-create-a
>>> - nullfs-support-fuse-systemd
>>> - meson-show-feature-summary
>>> bschubert2@imesrv6 libfuse.git>.github/workflows/run-checkpatch.sh 
>>> No typos will be found - file '/home/bschubert2/src/libfuse/libfuse.git/spelling.txt': No such file or directory
>>> No structs that should be const will be found - file '/home/bschubert2/src/libfuse/libfuse.git/const_structs.checkpatch': No such file or directory
>>> ERROR:GLOBAL_INITIALISERS: do not initialise globals to 0
>>> #61: FILE: util/fuser_conf.c:33:
>>> +int user_allow_other = 0;
>>>
>>> WARNING:LINE_SPACING: Missing a blank line after declarations
>>> #74: FILE: util/fuser_conf.c:46:
>>> +	char *dest = buf;
>>> +	while (1) {
>>>
>>> ...
>>>
>>> I don't have a strong opinion about these two above - feel 
>>> free to disable them. However, in order to merge it, it would
>>> be good to run without any checkpatch report.
>>> And everything that cppcheck and gcc-checker reports, definitely 
>>> need to be fixed.
>>
>> Basically
>>
>> cd <$FUSEDIR>
>> BUILDDIR="build-without-examples"
>> mkdir -p ${BUILDDIR}
>> meson setup ${BUILDDIR} -Dexamples=false 
>> ninja -C ${BUILDDIR}
>> ./.github/workflows/codechecker.sh --gcc --codechecker --build-dir ${BUILDDIR}
>>
>> gcc reports are starting here
>>
>> bschubert2@imesrv6 libfuse.git>stg series
>> + mount_service-add-systemd
>> + mount_service-create-high
>> + mount_service-use-the-new
>> + mount_service-update-mtab
>> + util-hoist-the-fuse.conf
>> + util-fix-checkpatch-complaints
>> + mount_service-enable
>>> mount.fuse3-integrate-systemd
>>
>>
>> bschubert2@imesrv6 libfuse.git>git show |head -n5
>> commit f908bb1504eca167e156671dde957c2e7192b7d2
>> Author: Darrick J. Wong <djwong@kernel.org>
>> Date:   Wed Mar 4 13:48:55 2026 -0800
>>
>>     mount.fuse3: integrate systemd service startup
>>
>>
>> ---==== Severity Statistics ====----
>> ----------------------------
>> Severity | Number of reports
>> ----------------------------
>> MEDIUM   |                 1
>> ----------------------------
>> ----=================----
>>
>> ----==== Checker Statistics ====----
>> -----------------------------------------------------
>> Checker name           | Severity | Number of reports
>> -----------------------------------------------------
>> gcc-deref-before-check | MEDIUM   |                 1
> 
> Oh, that's concerning.  Could you figure out exactly what it's
> complaining about and send that to me, please?

I'm afraid I don't manage anymore today. Still a couple of
other things to do (like changing laptop keyboard and packing
a few things, preparing bread for the oven).

It is really easy to run this yourself

cd <$FUSEDIR>
BUILDDIR="build-without-examples"
mkdir -p ${BUILDDIR}
meson setup ${BUILDDIR} -Dexamples=false 
ninja -C ${BUILDDIR}
./.github/workflows/codechecker.sh --gcc --codechecker --build-dir ${BUILDDIR}

There is --gcc and --cppcheck





^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2026-05-02 19:51 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-30 21:18 [GIT PULL v5.1] libfuse: run fuse servers as a contained service Darrick J. Wong
2026-04-30 21:34 ` Bernd Schubert
2026-04-30 22:49   ` Darrick J. Wong
2026-05-02 15:59     ` Bernd Schubert
2026-05-02 16:26       ` Bernd Schubert
2026-05-02 19:05         ` Darrick J. Wong
2026-05-02 19:51           ` Bernd Schubert
2026-05-02 16:30       ` Darrick J. Wong
2026-05-02 16:58         ` Bernd Schubert
2026-05-02 18:57           ` Darrick J. Wong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox