FUSE Subsystem Tutorial
| 中文 | [English] | Main contents |
Source baseline: Linux 7.2-rc6.
Chapter 1: FUSE subsystem design
Chapter 1 explains why FUSE needs its objects, protocol identities, cache leases, and queue rules without depending on individual source functions.
- Boundaries, layers, and end-to-end architecture
- Core objects, protocol identity, and capability negotiation
- Caching, I/O modes, and coherency
- Concurrency, backpressure, security, and failure
Chapter 2: Linux implementation
Chapter 2 follows Linux source code through object creation, request submission, daemon replies, and resource release.
- Source map, module initialization, mount, and FUSE_INIT
- Path walking, directory operations, attributes, and references
- OPEN, cached I/O, direct I/O, writeback, and RELEASE
- Request allocation, queue state machine, and /dev/fuse transport
- Ordinary mmap and virtio-fs DAX
- Teardown, abort, debugging, and performance analysis
Learning objectives
After completing the tutorial, you should be able to:
- distinguish a VFS inode, a FUSE nodeid, its generation, and an open file handle;
- explain request movement through pending, io, processing, and finished states;
- analyze dentry, attribute, and data-cache validity and invalidation;
- trace a VFS operation to
fuse_simple_request()and/dev/fuse; - determine when cached I/O, direct I/O, passthrough, or DAX is selected;
- use fusectl and FUSE tracepoints to diagnose daemon stalls, queue buildup, and reply errors.