备注
AI Translation Notice
This document was automatically translated by hunyuan-turbos-latest model, for reference only.
Source document: kernel/filesystem/fuse.md
Translation time: 2026-02-16 09:00:06
Translation model:
hunyuan-turbos-latest
Please report issues via Community Channel
备注
Author: longjin longjin@dragonos.org
DragonOS FUSE Architecture Design
This document focuses on “architecture understanding” and explains the layered structure, data flow, and key semantics of the DragonOS FUSE subsystem.
Design Goals
The core objectives of FUSE in DragonOS are:
Align with Linux FUSE semantics (referencing Linux 6.6 semantics)
Push “filesystem policy” down to user-space daemons while keeping the kernel simple
Seamlessly integrate with the existing VFS framework, reusing unified path resolution, file objects, and permission frameworks
Overall Architecture
Userspace
┌─────────────────────────────────────────────────────────────┐
│ FUSE daemon (libfuse3 或自定义协议处理循环) │
│ - read(/dev/fuse) 取请求 │
│ - write(/dev/fuse) 回应结果 │
└───────────────────────────────┬─────────────────────────────┘
│ FUSE 协议消息
Kernel │
┌───────────────────────────────▼─────────────────────────────┐
│ /dev/fuse 字符设备层 │
│ - 连接创建/克隆(clone) │
│ - 请求出队与回复入队 │
├─────────────────────────────────────────────────────────────┤
│ FuseConn 连接层 │
│ - INIT 协商、请求队列、pending 管理 │
│ - 中断/forget/notify 等控制消息 │
├─────────────────────────────────────────────────────────────┤
│ FuseFS + FuseNode (VFS 适配层) │
│ - mount 参数解析与实例化 │
│ - VFS inode/file 操作 -> FUSE opcode 映射 │
└───────────────────────────────┬─────────────────────────────┘
│
VFS / Syscalls
Layer Responsibilities
1) /dev/fuse Device Entry Layer
Binds a connection object to each opened
/dev/fusefile descriptorreaddelivers pending requests to the daemon,writereceives replies from the daemonProvides cloning capability for concurrent processing by multi-threaded daemons
Corresponding implementation entry: kernel/src/filesystem/fuse/dev.rs
2) Connection & Protocol Scheduling Layer (FuseConn)
Manages connection lifecycle: pre-mount, mounted, initialization complete, disconnection/unmount
Maintains request queues and in-flight request mappings (matching replies by unique ID)
Completes
FUSE_INITcapability negotiation (e.g.,max_write, flags)Handles control paths such as interrupts, forget, and notify
Corresponding implementation entry: kernel/src/filesystem/fuse/conn.rs
3) Filesystem Instance Layer (FuseFS)
Parses mount parameters (e.g.,
fd,rootmode,allow_other,default_permissions)Creates a FUSE filesystem instance and injects it into VFS
Provides instance-level policies (e.g., permission policy selection)
Corresponding implementation entry: kernel/src/filesystem/fuse/fs.rs
4) Node & File Operation Layer (FuseNode)
Maps VFS inode/file operations to FUSE opcodes (lookup/read/write/readdir/…)
Maintains node cache information and lookup/forget lifecycles
Handles common paths such as directory traversal, open/close, and attribute read/write
Corresponding implementation entry: kernel/src/filesystem/fuse/inode.rs
5) Protocol Definition Layer
Maintains FUSE protocol constants and structures aligned with Linux uapi
Serves as the foundation for request/response encoding/decoding on the kernel side
Corresponding implementation entry: kernel/src/filesystem/fuse/protocol.rs
Typical Workflow
Mount & Initialization
The user-space daemon opens
/dev/fusemount -t fuse ... -o fd=...binds this connection to the mount instanceThe kernel sends
FUSE_INIT, completing capability negotiation with the daemonAfter negotiation, it enters the regular request processing phase
Regular File Access
A process initiates a system call (e.g.,
open/read/write/readdir)VFS forwards it to
FuseNode, which encapsulates the corresponding FUSE requestThe request enters the connection queue, and the daemon reads it from
/dev/fuseThe daemon processes it and writes back a reply; the kernel wakes the waiting request and returns it to the caller
Unmount
When the filesystem is unmounted, the connection layer terminates or cleans up in-flight requests
The kernel sends destruction-related control messages to the daemon (e.g.,
DESTROYpath)The connection is finally released, and recycling is completed after the
/dev/fusefd is closed
Key Points for Linux Semantic Alignment
Mount type support normalizes
fuse.<subtype>tofusehandlingallow_othercontrols access policies for “non-mount owners”default_permissionscontrols the switch between VFS local DAC checks and remote permission modelsINITnegotiates capability bits and parameter boundaries (e.g., write size), handled uniformly by the connection layer
Demos & Getting Started
If you want to quickly “see examples and start writing a FUSE filesystem,” it is recommended to read in the following order:
Minimal implementation without
libfuse(directly reading/writing/dev/fuse)
user/apps/fuse_demo/README.mdExample based on
libfuse3(closer to common user-space development practices)
user/apps/fuse3_demo/README.mdFUSE kernel/protocol regression test samples (covering more semantic boundaries)
user/apps/tests/dunitest/suites/fuse/
You can also check the corresponding DADK build entries:
user/dadk/config/all/fuse_demo.tomluser/dadk/config/all/fuse3_demo.toml