Skip to content

Split writeback into kernel cache and write pipeline settings - #10

Merged
thomasjm merged 4 commits into
mainfrom
split-writeback
Nov 14, 2026
Merged

thomasjm merged 4 commits into
mainfrom
split-writeback

Conversation

@thomasjm

@thomasjm thomasjm commented Nov 14, 2026 •

Copy link
Copy Markdown
Contributor

The FUSE writeback cache makes the kernel keep its own file sizes, so a file grown from outside the mount reads back truncated while its inode is cached, and no FUSE notify can fix that. This splits writeback into two settings:

  • --writeback-cache / Tuning::writeback_cache: the kernel cache, now off by default.
  • --write-pipeline / Tuning::write_pipeline: send Twrites in the background, on by default.

Without the cache the pipeline has to keep reads, stats and write order correct itself: it waits for in-flight writes before getattr/read/lookup, keeps overlapping and O_APPEND writes in order, and merges small sequential writes while all slots are busy (4k writes at 2 ms RTT: ~8 MB/s without merging, ~110 MB/s with).

Also fixes two flaky failures in the diod tests: a hang when an unmount found the mount briefly busy, and mounts failing when another test took diod's port first.

Breaking: Tuning::writeback is replaced by the two fields above. --writeback still works but is deprecated. New: mount_with_invalidations takes the invalidation request and reply streams (used by the tests).

@thomasjm
thomasjm merged commit 3a539de into main Nov 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant