Repository navigation
Conversation
Let open and create hand a file to the kernel, which then serves that handle's reads, writes and mmap from a local backing file without calling read or write (Linux 6.9+, libfuse 3.17+). - backingOpen(fd) and backingClose(id) wrap FUSE_DEV_IOC_BACKING_OPEN and FUSE_DEV_IOC_BACKING_CLOSE, the ioctls libfuse only exposes through its low-level API. They run under the invalidation mutex, which teardown holds while clearing the session, and throw an Error carrying the errno. - open and create results accept backingId, written to fuse_file_info.backing_id; libfuse then replies with FOPEN_PASSTHROUGH. opendir keeps its two-value result and refuses a backingId. - A backingId combined with keepCache or directIO, or with the kernelCache, autoCache or directIo mount options, is refused before it reaches the kernel, which would otherwise fail the open with an opaque EIO (fs/fuse/iomode.c). - initWithConfig accepts maxBackingStackDepth (0 to 2), for backing files on a stacked filesystem such as overlayfs. - Fuse.CAP_PASSTHROUGH names the capability bit to request in want. Building against libfuse older than 3.17 still works: backingOpen then reports ENOTSUP and a non-zero backingId is refused.
This was referenced Oct 12, 2026
added 2 commits
October 12, 2026 22:12
Use direct I/O where mounted timeout tests require the exact ETIMEDOUT errno. Add separate Linux cached-read coverage that allows kernel-level EIO while checking that every native read reply is still ETIMEDOUT. Cover late read callbacks before and after unmount, add a native-boundary unit regression, and document deadline and direct-I/O semantics.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hi, thanks for this project. I'm currently working on adding support for FUSE passthrough to @cloudflare/computer (cloudflare/computer#197). As part of that change I'm looking at porting from fuse-native to this more modern library.
This PR implements the passthrough interface, hopefully you'd be open to considering adopting support.
References: kernel FUSE passthrough docs, Linux 6.9, libfuse 3.17.1 release,
passthrough_hp.cc.Compatibility
backingOpenneedsCAP_SYS_ADMIN, which the kernel requires.backingOpenthrowsENOTSUPand a non-zerobackingIdis refused. macOS behaves the same way.open/create/opendirresults andinitWithConfigare unchanged.opendirrefusesbackingId.Verification
Linux 7.0 (OrbStack), Node 22:
npm run check,test:types,test:unit,test:fuzzandnpm testpass. The real-mounttest/passthrough.jsconfirms theread/writehandlers are never called and that writes land in the backing file.test/passthrough.jsskips andtest/hardening.jspasses.Release scope
add generated prebuilds, or publish artifacts.
documentation.