Skip to content

Latest commit

 

History

History
297 lines (250 loc) · 17.5 KB

CHANGELOG.md

File metadata and controls

297 lines (250 loc) · 17.5 KB

Changelog

[Unreleased]

Added

  • uring_available() tells whether the kernel lets the process serve FUSE over io_uring: the fuse module's enable_uring parameter is on and the process may create an io_uring. Checking it before mounting saves a mount that would fall back to /dev/fuse.
  • 254: Split the library into a layered Cargo workspace and break the layers out into their own crates — fuse-backend-core (ABI, API/server, buffers), fuse-backend-fusedev and fuse-backend-virtiofs (transports), and fuse-backend-passthrough and fuse-backend-overlayfs (filesystem drivers) — so they can be depended on directly instead of only through the umbrella crate.
  • 254: Add standalone passthrough and overlayfs cargo features that select a filesystem driver on its own, without any transport.
  • 252: Extract the Vfs union multiplexer (with its pseudo_fs backing store) into a seventh crate, fuse-backend-vfs, resolving RFC open question 3. It sits between the facade and fuse-backend-core and carries the arc-swap and persist (versionize/dbs-snapshot) stack that the multiplexer needs.
  • 188: docs: document the experimental status of async-io support.
  • 188: Add a unified serving layer to the fusedev transport. The FuseServing trait is implemented by SyncFuseServing (classic /dev/fuse with synchronous handlers, always available), AsyncFuseServing (async-io feature) and UringFuseServing (fusedev-uring feature): each takes ownership of a mounted FuseSession, spawns workers per its configuration and turns Drop into teardown (stop accepting, finish in-flight requests, unmount, join the workers), while FuseServing::wait() waits out teardown driven from outside the process.
  • 188: Add SyncFuseServing, the serving loop every hand-rolled fusedev daemon duplicated, as a library type: N epoll-based worker channels — or, with SyncServingConfig::blocking, blocking channels cloned with FUSE_DEV_IOC_CLONE — each dispatching requests to a Server<F> until the session is torn down. On macOS the session exposes a single channel, so multi-worker configurations are rejected.
  • 188: Add AsyncFuseServing/AsyncServingConfig, scaling the classic transport out to N asynchronous workers, and UringFuseServing/UringConfig for the experimental FUSE-over-io_uring transport (kernel 6.14+). Both join the FuseServing interface, so a daemon can pick its transport at runtime behind Box<dyn FuseServing> and fall back to the classic transport on Error::UringNotSupported.
  • 269: AsyncFileSystem methods default to calling their FileSystem counterparts, so a file system only implements the handlers it serves asynchronously.
  • 269: FuseSession::detach() lazily unmounts a Linux session through &self, so the owner of a serving layer can start the teardown while another thread waits in FuseServing::wait().

Changed

  • Bump the declared minimum supported Rust version (MSRV) from 1.80 to 1.86. Trait-object upcasting (stabilized in Rust 1.86) is required by the default AsyncFileSystem read/write handlers and by the passthrough O_DIRECT relay, so with the async-io feature enabled the workspace has not built on older toolchains for a while — the 1.80 declaration was already inaccurate. CI gains an MSRV job that checks the crates declaring rust-version with the declared version, so the next accidental bump is caught.
  • The FUSE-over-io_uring transport answers opcodes it doesn't know with ENOSYS instead of EIO. Kernels that send FUSE_STATX only fall back to FUSE_GETATTR after ENOSYS, so statx() calls that ask for more than the basic fields, like the birth time stat(1) shows, failed.
  • 254: fuse-backend-rs is now a thin facade re-exporting the sub-crates. Every historical fuse_backend_rs::{abi, api, buffer, common, transport, passthrough, overlayfs} import path and cargo feature name (fusedev, virtiofs, vhost-user-fs, async-io, persist, fuse-t, fusedev-uring) still resolves to the same types, so existing dependency lines are unchanged.
  • 254: Small breaking surface from the layering fix (a 0.x release may break API): transport::Writer is a trait now instead of an enum, so code naming its variants must adapt; the transport-specific Reader constructors (from_fuse_buffer, from_descriptor_chain) moved onto the FuseDevReaderExt and VirtioFsReaderExt extension traits and need that trait in scope (the Reader::from_… spelling is otherwise unchanged); and on transport::Error the never-constructed ConvertIndirectDescriptor variant was removed, while FindMemoryRegion and InvalidChain are now gated behind the virtiofs feature. Those variants stay on the same transport::Error type (there is no separate virtiofs error type), so a virtiofs build matching them is unaffected.
  • 252: Replace the lazy_static dependency with std::sync::LazyLock and declare an explicit MSRV of Rust 1.80 (rust-version = "1.80") on every published crate. No API change; this drops one dependency and formalizes the minimum toolchain, which was previously undeclared (CI builds on stable).
  • 252: Vfs, arc-swap and the persist snapshot stack (versionize/dbs-snapshot) move out of fuse-backend-core into fuse-backend-vfs, so a consumer that brings its own FileSystem and does not need the multiplexer can depend on fuse-backend-core directly and skip arc-swap entirely (cargo tree -p fuse-backend-core --all-features shows no arc-swap or dbs-snapshot). The umbrella crate depends on fuse-backend-vfs unconditionally and still re-exports the historical api::vfs::* and flat api::Vfs paths under every feature combination (guarded by tests/legacy_paths.rs), so existing imports and the persist/async-io feature names are unchanged, and snapshots stay byte-compatible.
  • #221: FuseDevWriter no longer derives PartialEq/Eq; comparing two writers for equality was never meaningful (they wrap a mutable reply buffer) and no code in the workspace relied on it.

Fixed

  • READDIR and READDIRPLUS answer ENOMEM when the reply can't hold the reply header plus the requested size. The check left out the header, so a writer short by up to 16 bytes started the listing and failed partway.
  • A UringFuseServing worker that stops frees its ring entries only after the kernel has given them all back, and leaks them if that takes more than a second. A worker that stopped on an error while the connection was up freed entries the kernel could still copy requests into. A signal that interrupts the worker's io_uring_enter() calls no longer stops it.
  • 278: Treat EOPNOTSUPP/ENOTSUP and ENOSYS from getxattr as "not opaque" in Layer::is_opaque(), so OverlayFs::import() no longer aborts when a layer's backing filesystem has no xattr support at all (tmpfs answers EOPNOTSUPP to user.* xattrs before Linux 6.12, and a PassthroughFs layer with xattr disabled answers ENOSYS).
  • 269: For a session mounted with set_target_mntns(), FuseSession::umount() unmounts in that mount namespace. It no longer follows a symlink at the mountpoint.

Removed

  • 254: Drop the vestigial vhost and virtio-bindings dependencies that the pre-split vhost-user-fs build carried but never referenced; vhost-user-fs is now an alias for the virtiofs build.

[0.14.0]

Added

  • 261: feat(fusedev): add try_with_writer on FuseSession

Fixed

Removed

  • 222: Drop virtiofs DAX support as it never made it to the spec

[0.13.0]

Added

  • 187: Feat/support fuse resend notify
  • 211: Add notify_inval_inode and extend get_rootfs to return fs_idx for umount

Fixed

  • 189: fix by_id not free when use_host_ino=true
  • 191: fix request size too large when use direct io
  • 205: Fix: unable to perform sync on directory
  • 212: Fix fuse out header len in notify_resend

[0.12.0]

Added

  • 156: Fuse OverlayFs implementation.
  • 166: Import latest improvement for passthroughfs from virtiofsd project.
  • 169: Optimize implementation of lookup() for passthroughfs.
  • 170: abi: unify st_nlink.
  • 172: ptfs: refine implementation of seal_size_check().
  • 173: ptfs: use BorrowedFd instead of RawFd when possible.
  • 174: ptfs: add support for new cache mode Metadata.
  • 177: fusedev: add clone_fuse_file method to FuseSession.

Fixed

  • 125: fusedev: add fd-passthrough support.
  • 178: Fix batch forget can't handle too large msg.
  • 180: fix: fuse-t nobrowse.
  • 181: Fix CI: xfstests: restrict xfstests version.
  • 184: bugfix: read/write fd dropped unexpectedly.
  • 185: fix: fuse t channel read bug in during multiple reads

[0.11.0]

Added

  • 144: feat: implement fuse-t feature
  • 149: feat: add "persist" feature
  • 152: Add the ability to clean up the dentry cache can be used to clean up resources when VFS umount.
  • 153: linux_session: Make allow_other mount option optional
  • 159: UID/GID remapping support
  • 162: abi: Disable unsupported flags and functionality on MacOS
  • 163: vfs: add method to export root pseudofs's reference
  • 167: CI: add xfstests for passthrough fs

Fixed

  • 154: fuse: Ensure fd has same flags as read/write
  • 165: build: fix a build failure related to conditional compilation

[0.10.5]

Added

  • 138: linuxsession: support mount in given mount namespace
  • 141: linux_session: support set fusermount binary

Fixed

  • 140: fuse: Ensure readdir returns same ino as lookup

[0.10.4]

Added

  • 135: ZeroCopyWriter pass through available bytes from inner writer

Fixed

[0.10.3]

Added

  • #115
    • transport: pre-allocate VecDeque to avoid expending at runtime
    • passthroughfs: convert MultiKeyBTreeMap to InodeStore for InodeMap
    • passthroughfs: add config to specify entry and attr timeout for dir
    • passthroughfs: add config to control count mntid in altkey or not
  • #119: Support non-privileged users
  • [#126 #127](cloud-hypervisor#126 cloud-hypervisor#127): vfs: ensure entry attr st_ino consistency
  • #131: implement stable unique inode for passthroughfs

Fixed

  • #120: api: forget and batch forget must not reply
  • #123: fix possible IO hang due to string convertion failure
  • #129: abi: st_nlink is u32 on aarch64

[0.10.2]

Fixed

  • #105: abi: fix the conflict of PERFILE_DAX flag
  • #106: bugfix: passthrough: refect CFileHandle struct

[0.10.1]

Fixed

  • #102: passthrough: reduce the memory footprint of file handle
  • #103: vfs: correctly set attr.st_ino for loopup()

[0.10.0]

Added

  • #96: async_runtime: add probe of io_uring support
  • #88: add ability to disallow operations that could change file size

Fixed

  • #98: vfs: fix incorrect st_ino in entry.attr
  • #93: fix BIG_WRITES doesn't work

Removed

  • #96: async_runtime: remove thread_local of Runtime
  • #96: remove temporarily tokio-uring module

Changed

  • #97: log: print some variables in hexadecimal
  • #96: async_runtime: improved async file implement
  • #95: open file with O_APPEND cleared when writeback is enabled
  • #90: open file for reading if writeback cache is enabled

Upgraded

  • virtio-queue from 0.4 to 0.6
  • vhost from 0.4 to 0.5

[0.9.6]

  • Fix no_opendir option handling

[0.9.5]

Changed

  • Update dependency
  • Fix a bug in fusedev
  • Add toio-uring/tokio based async io framework

[0.9.2]

Added

  • #77: Implement Sync for FileVolatileSlice

[0.9.1]

Fixed

  • #74: Fixed some issues about EINTR and EAGIN handled incorrectly

[v0.4.0]

Added

  • MacOS support

Changed

  • linux_abi renamed to fuse_abi
  • switch from epoll to mio for cross-platform support
  • VFS umount no longer evicts pseudofs inodes
  • virtiofs transport Reader/Writer takes generic typed memory argument

[v0.3.0]

Added

  • Optionally enable MAX_PAGES feature
  • Allow customizing the default FUSE features before creating a new vfs structure
  • Support more FUSE server APIs

Changed

  • The FUSE server has no default FUSE feature set now. The default feature set is only defined in VfsOptions. Non VFS users have to define the default FUSE feature set in the init() method.

[v0.2.0]

Added

  • Enhance passthrough to reduce active fds by using file handle
  • implement Fromfusedev::Error for std::io::Error
  • Use vhost crate from crates.io
  • Introduce readlinkat_proc_file helper
  • Update vm-memory to 0.7.0
  • Add @eryugey to CODEOWNERS file

Fixed

  • Validate path components
  • Prevent ".." escape in do_lookup in passthroughfs
  • Prevent opening of special file in passthroughfs
  • Fix compile error in vfs async test
  • Record real root inode's ino of file system backends in vfs

Deprecated

[v0.1.2]

  • support KILLPRIV_v2
  • enhance vfs to support DAX window map/unmap operations

[v0.1.1]

  • Set README.md file for crate
  • Add CHANGELOG.md