Commit graph

89 commits

Author SHA1 Message Date
Antonio S. Musumeci
8eed256747 Restore splice zero-copy I/O as runtime options
Reinstate the splice read/write/move paths removed in 84592a9f, now
gated behind runtime options with negotiated pipe sizing and fallback
logging.

- Transport: msgbuf-piped splice receive, fd-referenced splice reply
  (vmsplice + splice), splice-move pipe-bounce, and restored
  fuse_buf_copy/fuse_buf_flags plumbing for copy fallbacks
- Negotiation: new pipe-max-size option (auto-raised at INIT when
  possible; the sysctl read/write is factored into src/pipe_max_size.cpp
  so fuse_init.cpp and option_parser.cpp share one implementation);
  fuse-msg-size clamped to what the pipe can hold; splice is disabled
  at INIT with a warning if the sysctl can't fit even the minimum,
  retracting the FUSE_CAP_SPLICE_* bits already advertised to the
  kernel in that case
- Read replies and splice-move are gated at 128 KiB (below that the
  syscalls cost more than the copy they avoid); every fallback path
  degrades to the copy path and logs once per process via SysLog
- msgbuf pipe cache is process-global and mutex-guarded (mutex_lockguard)
  so pipes can move between read and worker threads under
  process-thread mode
- API simplified after review: collapsed the three per-axis options
  (splice-read/write/move) into a single splice boolean (default on);
  no-splice-read/write/move and the bare splice-read/write/move
  spellings stay registered as accepted no-ops so existing mount
  options don't fail the mount, but they do NOT alter the splice
  knob - upgraders with no-splice-* in their config get splice
  enabled and must set splice=false explicitly (see
  deprecated_options.md)
- Fixed several correctness issues found in parallel review: a
  dropped write_buf registration that silently corrupted writes, a
  dirty-pipe reuse bug in msgbuf_free, an iov double-send in
  fuse_reply_data's splice-move fallback, and pipe-capacity math that
  assumed a 4096-byte page size
- Modernized the transport/negotiation code to this codebase's C++
  style: RAII (unique_ptr/DEFER) instead of malloc/free and manual fd
  close(), std::from_chars/to_chars instead of stoul/snprintf,
  _ReplyPipe's pipe ops as methods instead of free functions closing
  over a thread_local global, and vendored/libfuse/lib/buffer.cpp (a
  near-verbatim port of upstream's buffer.c) brought in line with the
  rest of the fork
- Documented splice and pipe-max-size options (mkdocs, FAQ,
  deprecated-options list); added tools/bench-splice.sh
- Benchmarked on tmpfs: seq_write +21%, seq_read +52%, small_write
  +5%, small_read +12%; validated with a 1h soak (~271 GiB
  hash-verified I/O, zero integrity failures), a live-mount round-trip
  of I/O above the splice threshold, and the existing unit/smoke
  suites at their pre-existing baseline

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-07 11:24:16 -04:00
natalefalco
8ea47df13e Include Docker Compose setup for mergerfs
Added Docker Compose configuration for running mergerfs.
2026-07-31 08:13:59 -05:00
shyney7
42ab831d97 docs/setup: link install :z example to SELinux FAQ 2026-05-17 10:14:21 -05:00
shyney7
89b4046d11 docs/faq: add SELinux relabeling entry 2026-05-17 10:14:21 -05:00
Antonio SJ Musumeci
99835a0178 Document advisory locking limitation and update deprecated options
- Add documentation explaining that advisory file locking is not supported

- Add remember-nodes to deprecated options mapping

- Add comment explaining stat_crc32b fingerprint invalidation behavior

- Fix heading level for Host vs Container identity section
2026-05-06 20:49:46 -04:00
Antonio SJ Musumeci
f1034a3ad6 Remove timed node removal 2026-05-06 20:49:46 -04:00
Antonio SJ Musumeci
1a8eb326af Tweak docs on NFS and identity management 2026-04-21 13:20:07 -05:00
Antonio SJ Musumeci
9fb1642e93 Fix docs regarding "noforget" 2026-04-20 23:25:47 -05:00
Antonio SJ Musumeci
9e2e1afafa Update docs on limiting drive spinup
Some checks failed
mkdocs / deploy (push) Has been cancelled
2026-04-06 14:01:20 -05:00
Antonio SJ Musumeci
3b10406f95 Add more details to project comparisons 2026-04-04 02:17:06 -05:00
Antonio SJ Musumeci
ecee84b323 Improve proj comparisons + new SnapRAID details 2026-03-31 19:51:28 -04:00
Antonio SJ Musumeci
b8776d205d Update docs; add nofs, policyfs and greyhole
Some checks failed
mkdocs / deploy (push) Has been cancelled
2026-03-27 22:54:39 -05:00
Antonio SJ Musumeci
2ea6290e4b Update limiting drive spinup doc
Some checks failed
mkdocs / deploy (push) Has been cancelled
2026-03-04 11:05:55 -05:00
trapexit
b4239495a0
Update docs for logging changes + new video (#1618)
Some checks failed
mkdocs / deploy (push) Has been cancelled
2026-02-12 23:21:43 -06:00
trapexit
3222de6c9c
Fixup debug output (#1617) 2026-02-12 22:50:38 -06:00
trapexit
a47842e2f8
Add MOS to projects and update misc links (#1614)
Some checks failed
mkdocs / deploy (push) Has been cancelled
2026-01-27 11:25:32 -06:00
trapexit
f769d7474b
Add new links to media docs (#1613)
Some checks are pending
mkdocs / deploy (push) Waiting to run
2026-01-27 07:59:38 -06:00
trapexit
2ae57642f4
Misc documentation updates (#1612) 2026-01-27 07:00:22 -06:00
trapexit
965e26989c
Misc documentation updates (#1605)
Some checks failed
mkdocs / deploy (push) Has been cancelled
2025-12-23 23:25:39 -06:00
François-Xavier Payet
22df87c86a
Add LUP policy (#1601)
Some checks are pending
mkdocs / deploy (push) Waiting to run
2025-12-14 00:36:12 -06:00
trapexit
72fb6e4aba
Update submitting bug reports, improve collect-info (#1598)
Some checks failed
mkdocs / deploy (push) Has been cancelled
2025-12-06 13:55:14 -06:00
trapexit
9b046d9a34
Rework credential handling to support chroot & idmap (#1595)
Some checks are pending
mkdocs / deploy (push) Waiting to run
Run in an elevated credential mode (root) and let the kernel manage
entitlements. Will result in slightly different behavior but should
not be noticed by most.
2025-12-05 21:03:48 -06:00
trapexit
411d181473
Add qbittorrent specific section of known issues (#1591) 2025-11-25 23:14:20 -06:00
trapexit
f7e86d90ce
Add FAQ about lack of create policies about file size (#1578)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
2025-11-16 23:44:24 -06:00
trapexit
3bacaa6f7f
Add lazy-umount-mountpoint page and mount -a FAQ (#1573) 2025-11-12 12:19:00 -06:00
trapexit
b6e1a08aef
Add link to container image repo (#1570)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
2025-11-11 19:38:18 -06:00
trapexit
47bd4259b8
Add container image details (#1569)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-11-08 20:28:10 -06:00
trapexit
4aab008233
Ensure backward compatibility with remember & noforget (#1566)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
2025-11-05 19:43:57 -06:00
trapexit
3a7a4a13e7
Improve mergerfs intro in docs (#1563)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-11-04 00:02:46 -06:00
trapexit
ec16d07fba
Mention how mmap error when direct io is enabled (#1557)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-10-31 09:31:37 -05:00
trapexit
077484323c
Fix variable names of fuse-msg-size and posix-acl (#1553)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-10-25 17:00:16 -05:00
trapexit
700fcfccf5
Update fuse-msg-size docs (#1552)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
2025-10-24 23:34:28 -05:00
trapexit
4b4801add6
Config options docs updates (#1551) 2025-10-24 22:31:04 -05:00
trapexit
3bee0f0b57
Misc docs updates (#1549) 2025-10-24 20:47:33 -05:00
trapexit
727c522fb8
Rework config, centralize fuse config (#1547)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
2025-10-24 08:20:29 -05:00
trapexit
00e5467e99
Misc docs updates (#1544)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-10-13 11:44:53 -05:00
trapexit
569a151da2
Add ability to proxy ioprio of client apps (#1534)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-09-26 11:36:56 -05:00
trapexit
95ab37fdd2
Fix typo in visualization and add new vid to docs (#1532)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-09-22 16:23:50 -05:00
trapexit
1707dc27e3
Misc doc updates (#1531)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
2025-09-21 14:25:24 -05:00
pjv
6acef3a638
Fix typo in moveonenospc.md (#1527)
typo
2025-09-21 11:42:15 -05:00
trapexit
b3656a0243
Fix broken doc links (#1525)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-09-19 19:25:31 -05:00
trapexit
41b40b94fa
Misc docs updates (#1524) 2025-09-19 19:20:28 -05:00
trapexit
ca59ae53a5
idmap mount support (#1523)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
* Add idmap mount support

* Further replacement of std::filesystem::path to fs::path

* Update docs regarding idmap support
2025-09-18 00:07:28 -05:00
trapexit
5becb334cd
Misc updates of docs (#1518)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
2025-09-01 20:58:58 -05:00
trapexit
2101ef5bcc
Updates to docs, add nonraid, more intro to fs details (#1512)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
2025-08-21 15:09:04 -05:00
Max.-F. Helm
dd1bea52cd
Allow empty lines in config ini files (#1509)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
* Allow empty lines in config files

* Add example comment to ini example in docs/quickstart.md

---------

Co-authored-by: Max-F-Helm <m7t24zklr@relay.firefox.com>
2025-08-13 20:00:05 -05:00
trapexit
6ae9641bcc
Misc documentation updates (#1505) 2025-08-10 17:23:55 -05:00
trapexit
2b500f194a
Rework of runtime interface (#1498)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
Also have special error handling for when branches are invalid and
ENOENT would be returned for getattr and readdir so users understand
what is going on and the runtime interface can still be used to fix
the problem.
2025-07-21 18:18:59 -05:00
trapexit
f852474073
Update the secondary group cache (#1492)
Some checks are pending
CodeQL / Analyze (push) Waiting to run
mkdocs / deploy (push) Waiting to run
* Use concurrent_flat_map to build a global cache rather than per
thread.
* Create global maintanence thread manager for clearing unused cache
entries.
2025-07-05 17:05:53 -05:00
trapexit
9e626228be
Add mergerfs.collect-info (#1491)
Some checks failed
CodeQL / Analyze (push) Has been cancelled
mkdocs / deploy (push) Has been cancelled
A tool to collect info for support requests.
2025-07-03 20:18:05 -05:00