This is a coordinated patch submission for famfs (Fabric-Attached Memory
File System) across three repositories:
1. Linux kernel (21 patches) - dax fsdev driver + fuse/famfs integration
2. libfuse (4 patches) - famfs protocol support for fuse servers
3. ndctl/daxctl (2 patches) - support for the new "famfs" devdax mode
Each series is posted as a reply to this cover message, with individual
patches replying to their respective series cover.
Overview
--------
Famfs exposes shared memory as a file system. It consumes shared memory
from dax devices and provides memory-mappable files that map directly to
the memory with no page cache involvement. Famfs differs from conventional
file systems in fs-dax mode in that it handles in-memory metadata in a
sharable way (which begins with never caching dirty shared metadata).
Famfs started as a standalone file system [1,2], but the consensus at
LSFMM 2024 and 2025 [3,4] was that it should be ported into fuse.
The key performance requirement is that famfs must resolve mapping faults
without upcalls. This is achieved by fully caching the file-to-devdax
metadata for all active files via two fuse client/server message/response
pairs: GET_FMAP and GET_DAXDEV.
Patch Series Summary
--------------------
Linux Kernel (V3, 21 patches):
- dax: New fsdev driver (drivers/dax/fsdev.c) providing a devdax mode
compatible with fs-dax. Devices can be switched among 'devdax', 'fsdev'
and 'system-ram' modes via daxctl or sysfs.
- fuse: Famfs integration adding GET_FMAP and GET_DAXDEV messages for
caching file-to-dax mappings in the kernel.
libfuse (V2, 4 patches):
- Updates fuse_kernel.h to kernel 6.19 baseline
- Adds famfs DAX fmap protocol definitions
- Adds API for kernel mount options
- Implements famfs DAX fmap support for fuse servers
ndctl/daxctl (2 patches):
- Adds daxctl support for the new "famfs" mode of devdax
- Adds test/daxctl-famfs.sh for testing mode transitions
Changes Since V2 (kernel)
-------------------------
- Dax: Completely new fsdev driver replaces the dev_dax_iomap modifications.
Uses MEMORY_DEVICE_FS_DAX type with order-0 folios for fs-dax compatibility.
- Dax: The "poisoned page" problem is properly fixed via
fsdev_clear_folio_state()
which clears stale mapping/compound state when fsdev binds.
- Dax: Added dax_set_ops() and driver unbind protection while filesystem
mounted.
- Fuse: Famfs mounts require CAP_SYS_RAWIO (exposing raw memory devices).
- Fuse: Added DAX address_space_operations with noop_dirty_folio.
- Rebased to latest kernels, compatible with recent dax refactoring.
Testing
-------
The famfs user space [5] includes comprehensive smoke and unit tests that
exercise all three components together. The ndctl series includes a
dedicated test for famfs mode transitions.
References
----------
[1] https://lore.kernel.org/linux-cxl/[email protected]/
[2] https://lore.kernel.org/linux-cxl/[email protected]/
[3] https://lwn.net/Articles/983105/ (LSFMM 2024)
[4] https://lwn.net/Articles/1020170/ (LSFMM 2025)
[5] https://famfs.org (famfs user space)
[6] https://lore.kernel.org/linux-cxl/[email protected]/
(V2)
--
John Groves