From patchwork Wed Nov 11 04:20:28 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Hatle X-Patchwork-Id: 3098 Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.2480.1794370864791628574 for ; Tue, 10 Nov 2026 20:21:05 -0800 Authentication-Results: mx.groups.io; dkim=none (message not signed); spf=pass (domain: kernel.crashing.org, ip: 63.228.1.57, mailfrom: mark.hatle@kernel.crashing.org) Received: from kernel.crashing.net (70-99-78-136.nuveramail.net [70.99.78.136] (may be forged)) by gate.crashing.org (8.18.1/8.18.1/Debian-2) with ESMTP id 6AB4L3lk2428068 for ; Tue, 10 Nov 2026 22:21:03 -0600 From: Mark Hatle To: yocto-patches@lists.yoctoproject.org Subject: [pseudo][PATCH 00/34] Various fixes Date: Tue, 10 Nov 2026 22:20:28 -0600 Message-Id: <1794370862-30908-1-git-send-email-mark.hatle@kernel.crashing.org> X-Mailer: git-send-email 1.8.3.1 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by lin-tor-korg-lkml-alma10-1 with HTTPS for ; Wed, 11 Nov 2026 04:21:15 -0000 X-Groupsio-URL: https://lists.yoctoproject.org/g/yocto-patches/message/5262 MIME-Version: 1.0 This is a large set. It fixes pretty much all of the issues I'm aware of, including many found during recent development. The first 4 changes are related to the long standing issue of parallel symlink/renames. This is effectively fixed by putting in a shared lock that serializes disk operations across processes. Much of the additional work was syncronization for newer Linux systems, removal of non Linux ports, removal of obsolete code, etc. Update the pseudo.1 man page and other documentation to match the current state of the implementation. These files had slowly gone out of sync over the past about 10 years. Some simple performance optimizations were also included in this set. The goal is to eliminate various calls in an attempt to offset the serialized path lock usage. The items look like they do improve performance over large numbers of files, but without a significantly large build, it's unclear if they will make a measurable difference. Mark Hatle (34): pseudo_client: serialize path changes across clients ports: hold the path lock in create and metadata wrappers ports: check created files under the path lock before recording them test-parallel-ops: Add a parallel create/rename/link/chmod test ports: Remove PSEUDO_NO_REAL_AT_FUNCTIONS ports/unix: Remove guts overridden by the Linux port ports: Let the port define how pseudo stats files patches/yocto-older-glibc-symbols.patch: Update to latest YP version Remove unused #if 0 debug code Replace #if 0 strerror() debug messages with a comment pseudo_util: Remove stale with_libpseudo() comment ports/common/subports: Show the unknown OS name in the error ports/linux: Drop redundant PSEUDO_LINK_SYMLINK_BEHAVIOR override pseudo_server: Skip events for clients closed earlier in the batch pseudo_server: Drop an idle client when out of file descriptors pseudo_server: Always use epoll configure: Fix --disable-* options pseudo_server: Lower highest_client when the highest client closes pseudo_server: Set highest_client to the new client when growing pseudo_util: Store PSEUDO_SEVERITY as severity names pseudo: Fix the -k severity option pseudo_util: Make -v and numeric PSEUDO_DEBUG add debug flags AGENTS.md: Add to assist future developers pseudo_util: Fix the date format in the event log dump pseudo: List -p in the usage message pseudo_util: Write the event log to PSEUDO_EVLOG_FILE pseudo.1: Update to match the current code ports/linux: Don't require configure: Require GCC 5 or later doc: Update README and doc/ to match the code configure: Fix the --enable-profiling default pseudo_util: Skip unneeded lstat calls when canonicalizing paths wrappers: Don't re-block signals in nested wrapper calls Wrap execvpe(), fexecve() and execveat() AGENTS.md | 85 +++++++++ Makefile.in | 3 +- README | 41 +++- README.security | 4 +- configure | 47 +++-- doc/chroot | 10 +- doc/database | 75 +++++--- doc/overview | 21 +-- doc/passwd | 7 +- doc/program_flow | 16 +- doc/pseudo_ipc | 37 ++-- doc/utils | 6 +- makewrappers | 17 ++ patches/yocto-older-glibc-symbols.patch | 4 +- ports/common/guts/execveat.c | 29 +++ ports/common/guts/execvpe.c | 29 +++ ports/common/guts/fexecve.c | 21 +++ ports/common/pseudo_wrappers.c | 141 ++++++++++++++ ports/common/subports | 2 +- ports/common/wrapfuncs.in | 3 + ports/linux/guts/__fxstatat.c | 12 -- ports/linux/guts/__fxstatat64.c | 14 -- ports/linux/guts/__xmknodat.c | 23 +-- ports/linux/guts/fopen64.c | 11 +- ports/linux/guts/freopen64.c | 11 +- ports/linux/guts/mkostemp64.c | 4 +- ports/linux/guts/open_tree.c | 4 +- ports/linux/guts/open_tree_attr.c | 4 +- ports/linux/guts/openat.c | 51 ++--- ports/linux/openat2/guts/openat2.c | 44 ++--- ports/linux/portdefs.h | 26 +-- ports/linux/statx/wrapfuncs.in | 2 +- ports/linux/wrapfuncs.in | 40 ++-- ports/linux/xattr/wrapfuncs.in | 16 +- ports/unix/guts/faccessat2.c | 12 -- ports/unix/guts/fchmodat.c | 18 -- ports/unix/guts/fchownat.c | 12 -- ports/unix/guts/fopen.c | 5 +- ports/unix/guts/freopen.c | 5 +- ports/unix/guts/lchown.c | 15 -- ports/unix/guts/linkat.c | 11 -- ports/unix/guts/lutimes.c | 16 -- ports/unix/guts/mkdirat.c | 17 -- ports/unix/guts/mkfifoat.c | 22 --- ports/unix/guts/mknod.c | 15 -- ports/unix/guts/mknodat.c | 81 -------- ports/unix/guts/readlinkat.c | 8 - ports/unix/guts/renameat.c | 12 -- ports/unix/guts/symlinkat.c | 12 -- ports/unix/guts/tmpnam.c | 20 -- ports/unix/guts/unlinkat.c | 25 --- ports/unix/guts/utimes.c | 15 -- ports/unix/pseudo_wrappers.c | 7 +- ports/unix/wrapfuncs.in | 56 +++--- pseudo.1 | 318 ++++++++++++++++++++++++++++---- pseudo.c | 5 +- pseudo.h | 30 ++- pseudo_client.c | 128 +++++++++++-- pseudo_client.h | 16 +- pseudo_server.c | 265 +++++--------------------- pseudo_util.c | 93 ++++++---- pseudo_wrappers.c | 9 +- templates/wrapfuncs.c | 30 +-- test/test-debug-flags.sh | 59 ++++++ test/test-exec.c | 50 +++++ test/test-exec.sh | 31 ++++ test/test-execl.c | 4 - test/test-execl.sh | 13 -- test/test-open_tree_attr-syscall.c | 1 - test/test-parallel-ops.sh | 53 ++++++ 70 files changed, 1364 insertions(+), 985 deletions(-) create mode 100644 AGENTS.md create mode 100644 ports/common/guts/execveat.c create mode 100644 ports/common/guts/execvpe.c create mode 100644 ports/common/guts/fexecve.c delete mode 100644 ports/unix/guts/lchown.c delete mode 100644 ports/unix/guts/lutimes.c delete mode 100644 ports/unix/guts/mknod.c delete mode 100644 ports/unix/guts/mknodat.c delete mode 100644 ports/unix/guts/tmpnam.c delete mode 100644 ports/unix/guts/utimes.c create mode 100755 test/test-debug-flags.sh create mode 100644 test/test-exec.c create mode 100755 test/test-exec.sh delete mode 100644 test/test-execl.c delete mode 100755 test/test-execl.sh create mode 100755 test/test-parallel-ops.sh