Linux CIFS 架构是内核级的SMB/CIFS 客户端 VFS 实现cifs.ko完整对接 Linux VFS 层向下封装 SMB 协议栈与网络 I/O向上提供标准文件系统接口支持 SMB1/CIFS、SMB2、SMB3含 3.1.1等。CIFS 完整组件架构总图┌─────────────────────────────────────────────────────────────────────┐ │ 用户态工具层 │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │ │ mount.cifs │ │ cifs-utils │ │ cifs.upcall │ │ │ │ (挂载) │ │ (查询/ACL) │ │ (Kerberos/DFS) │ │ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ VFS 虚拟文件系统 │ │ open/read/write/stat/fsync… │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ 【 CIFS VFS 适配层 】 │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ Super Block │ │ Inode Operations│ │ File Operations │ │ │ │ cifs_sb_info │ │ lookup/create │ │ read/write/fsync│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ ┌─────────────────┐ ┌─────────────────────────────────────────┐ │ │ │ Dentry Cache │ │ 语义转换模块 │ │ │ │ d_revalidate │ │ 编码/权限/时间戳/POSIX→Windows │ │ │ └─────────────────┘ └─────────────────────────────────────────┘ │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ CIFS 协议核心层 │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ 会话管理 │ │ 树连接管理 │ │ 请求调度队列 │ │ │ │ cifs_ses │ │ cifs_tcon │ │ mid_q_entry │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ ┌─────────────────────────────────────┐ ┌─────────────────────┐ │ │ │ SMB 协议引擎 │ │ 缓存 Oplock/Lease │ │ │ │ SMB1/SMB2/SMB3 封包/解包 │ │ pagecache/inode缓存 │ │ │ └─────────────────────────────────────┘ └─────────────────────┘ │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ 网络传输层 │ │ TCP socket 端口445 签名/加密(seal) │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ 远端Windows / Samba Server │ └─────────────────────────────────────────────────────────────────────┘用户态组件mount.cifs发起挂载、解析参数、调用内核 mountcifs-utils查看状态、设置 ACLcifs.upcall处理 Kerberos 认证、DFS 路径解析CIFS VFS 适配层核心对接层super block管理整个挂载实例inode opslookup、create、mkdir、rmdir、setattrfile opsread、write、fsync、mmapdentry目录项缓存加速路径查找语义转换UTF8 ↔ UTF16、POSIX ↔ Windows 权限、时间戳转换CIFS 协议核心层cifs_ses用户会话认证cifs_tcon共享树连接mid_q_entry请求队列、异步发送、超时重试SMB 引擎SMB2/SMB3 封包解包Oplock/Lease缓存锁保证多客户端一致性网络层TCP 445签名sign、加密seal用户空间层挂载工具mount.cifscifs-utils负责解析挂载参数、处理认证、调用内核mount接口。管理工具smbinfo、setcifsacl、cifs.upcallKerberos/DFS 解析。配置与调试/proc/fs/cifs/Stats、DebugData、cifsFYI、/sys/module/cifs/parameters/。VFS 适配层核心对接层实现 Linux VFS 标准接口super_operations、file_operations、inode_operations、dentry_operations。职责管理super_block、inode、dentry、file等 VFS 对象。处理权限、缓存、路径查找、文件锁、扩展属性xattr、ACL 等。映射 POSIX 语义到 SMB 协议如chmod、symlink、hardlink。它位于用户进程 ↓ VFS 虚拟文件系统open/read/write/stat... ↓ 【 CIFS VFS 适配层 】← 你现在要看的核心 ↓ CIFS 协议引擎SMB2/SMB3 封包、会话、连接 ↓ TCP 网络struct super_operations—— 超级块操作文件系统级别的操作读索引节点alloc_inode释放索引节点destroy_inode同步文件系统sync_fs统计空间statfsCIFS 对应实现cifs_super_operations作用管理 CIFS 挂载实例struct cifs_sb_info管理与服务器的树连接struct cifs_tcon管理 UID/GID 映射、缓存参数struct inode_operations—— inode 操作文件 / 目录元数据操作创建文件create创建目录mkdir查找lookup链接 / 软链接link、symlink修改权限 / 属主setattrCIFS 实现cifs_inode_operationscifs_dir_inode_operations核心函数cifs_lookup: 路径查找 → 发 SMB Query/Find 指令cifs_create: 创建文件 → 发 SMB Createcifs_mkdir: 建目录 → SMB Create 目录struct file_operations—— 文件 I/O 操作用户最常调用的 read/writeread_iterwrite_itermmapfsynclockCIFS 实现cifs_file_operations核心函数cifs_file_read_itercifs_file_write_itercifs_fsyncstruct dentry_operations—— 目录项缓存操作主要是缓存策略d_revalidate: 验证 dentry 是否还有效CIFS 实现cifs_dentry_operationscifs_d_revalidate作用判断本地缓存的目录项是否与服务端一致避免过期。struct cifs_sb_info挂载超级块私有数据每个 mount 一个指向struct cifs_tcon树连接UID/GID 映射缓存开关oplock、目录缓存SMB 版本、安全模式struct cifs_inode_infoinode 私有数据服务端的 file ID /unique ID缓存的属性atime/mtime/ctime/size缓存标记是否脏、是否需要重新获取oplock/lease 状态struct cifsFileInfofile 结构体私有数据服务端的 FID /open 句柄oplock 状态读 / 写偏移CIFS 核心逻辑层协议引擎会话与连接管理struct cifs_ses会话、struct cifs_tcon树连接 / 共享、struct TCP_Server_Info服务器连接。协议协商自动 / 手动选择 SMB 方言默认 SMB3.1.1、协商能力Unix 扩展、POSIX 扩展、加密、签名。请求调度异步请求队列、并发控制、重试与超时。支持multichannelSMB3 多通道、persistent handles等高级特性。缓存子系统页缓存Page Cache与本地文件系统一致读写先经页缓存提升性能。Oplock/Lease机会锁 / 租约服务器授予客户端缓存权限独占 / 共享减少网络往返。目录 / Inode 缓存LookupCache加速路径查找。安全子系统认证NTLMv2、Kerberoscifs.upcall、匿名 / 访客。安全数据包签名sign、传输加密sealSMB3。网络传输层TCP 连接默认端口 445Direct Hosting旧版 139NBT。I/O 模型异步非阻塞、多路复用支持大窗口与批量请求。数据处理SMB 报文封包 / 解包、Marshaling/Unmarshaling、Unicode 转换、校验和。核心数据结构结构核心职责struct cifs_sb_info挂载点私有数据关联super_block、tcon、缓存参数struct cifs_tcon树连接共享对应一个//server/share含权限、UID/GID 映射struct cifs_ses用户会话含认证信息、安全上下文、服务器能力struct TCP_Server_Info服务器连接管理 socket、请求队列、多通道struct cifsFileInfo打开文件句柄关联file、FID、Oplock 状态struct mid_q_entry待响应的 SMB 请求管理超时、回调、重试I/O 路径读写流程读流程用户调用read()→ VFS →cifs_file_read_iter()。检查页缓存命中则直接返回未命中则发起 SMBRead请求。核心层封装Read请求 → 网络层发送 → 等待服务器响应。收到数据 → 填入页缓存 → 拷贝到用户空间 → 更新缓存状态Oplock。写流程用户调用write()→ VFS →cifs_file_write_iter()。数据写入页缓存延迟写。脏页回写fsync/flush/ 内存压力封装 SMBWrite请求 → 网络发送 → 等待确认。若持有独占 Oplock可批量写否则需同步写并更新服务器状态。CIFS 的调用链以 read 为例user read() ↓ sys_read ↓ vfs_read ↓ cifs_file_read_iter 【VFS 适配层入口】 ↓ 1. 检查页缓存 page cache 命中 → 直接拷贝 不命中 → 下发 SMB READ ↓ cifs_send_recv_msg 【进入协议层】 ↓ SMB2_READ 请求封包 → 网络 → 服务器 ↓ 填页缓存 → 返回用户写流程同理先写页缓存再由回写线程下发 SMB2_WRITE。CIFS 适配层的缓存机制CIFS 大量依赖 VFS 缓存以提升性能dentry 缓存lookup结果缓存由d_revalidate保证一致性inode 缓存缓存文件大小、mtime、属性减少 SMB Query Infopage cache读写都走页缓存由 oplock/lease 保证多客户端一致性oplock/lease机会锁适配层通过cifs_get_oplockcifs_release_oplock向服务端申请缓存权限。CIFS VFS 层架构总图┌─────────────────────────────────────────────────────────┐ │ 用户进程 系统调用 │ │ open/read/write/stat/mkdir/rmdir/rename/fsync... │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ VFS 虚拟文件系统层 │ │ 统一接口syscall → vfs_open → vfs_read → ... │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ 【CIFS VFS 适配层】 │ ← 你要的核心 │ ┌─────────────────────────────────────────────────┐ │ │ │ 文件系统注册 超级块管理 │ │ │ │ cifs_fs_type → cifs_mount → cifs_sb_info │ │ │ │ struct super_operations: cifs_super_ops │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ Inode 操作层 │ │ │ │ struct inode_operations: cifs_inode_ops │ │ │ │ lookup/create/mkdir/rmdir/setattr/link │ │ │ │ struct cifs_inode_info │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ Dentry 缓存层 │ │ │ │ struct dentry_operations: cifs_dentry_ops │ │ │ │ d_revalidate: 校验缓存是否过期 │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 文件 I/O 操作层 │ │ │ │ struct file_operations: cifs_file_ops │ │ │ │ read_iter / write_iter / fsync / mmap / lock │ │ │ │ struct cifsFileInfo │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ POSIX ↔ SMB 语义转换层 │ │ │ │ 权限映射、时间戳转换、编码转换(UTF8↔UTF16) │ │ │ │ ACL 映射、路径大小写、符号链接适配 │ │ │ └─────────────────────────────────────────────────┘ │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ CIFS 协议引擎层 │ │ SMB2/SMB3 封包、会话管理、连接、请求队列、Oplock/Lease │ │ struct cifs_tcon / cifs_ses / TCP_Server_Info │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ 网络传输层 │ │ TCP socket、端口445、加密(seal) │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ Windows / Samba 服务器 │ └─────────────────────────────────────────────────────────┘CIFS open () 完整调用栈流程图这是从用户进程 → VFS → CIFS VFS 适配层 → 协议层 → 网络 → 服务器的完整、精准、内核源码级调用栈流程图完全对应 Linux 内核cifs.ko真实执行路径。┌─────────────────────────────────────────────────────────────────────┐ │ 用户进程空间 │ │ │ │ open(/mnt/cifs/file.txt, O_RDWR) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 系统调用层 (syscall) │ │ │ │ sys_open / do_sys_open │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ VFS 虚拟文件系统层 │ │ │ │ do_filp_open() │ │ path_openat() │ │ vfs_open() │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 【CIFS VFS 适配层 - 核心入口】 │ ← 对接VFS │ │ │ inode-i_fop-open() │ │ ╔═══════════════════════════════╗ │ │ ║ cifs_open() 【主函数】 ║ │ │ ╚═══════════════════════════════╝ │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS VFS 适配层 - 准备与校验 │ │ │ │ 1. 获取 cifs_sb_info (挂载私有数据) │ │ 2. 获取 cifs_tcon (树连接/共享) │ │ 3. 解析 flags (O_CREAT, O_TRUNC 等) │ │ 4. 权限检查 (uid/gid映射) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS VFS 适配层 → 调用协议层接口 │ │ │ │ cifs_nt_open() / SMB2_open() │ │ ➜ 编码转换UTF-8 → UTF-16LE 文件名 │ │ ➜ 封装 SMB2_CREATE 请求参数 │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS 协议引擎层 │ │ │ │ SMB2_create_send() 【发送SMB创建请求】 │ │ cifs_send_async_read() │ │ mid_q_entry 管理 (请求队列/超时) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 网络传输层 │ │ │ │ TCP Socket (端口 445) │ │ ➜ 发送 SMB2_CREATE 报文 │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ Windows / Samba 服务器 │ │ │ │ 处理文件创建/打开 → 返回 File ID (FID) │ │ 返回 Oplock/Lease (缓存授权) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 协议层 - 接收响应 │ │ │ │ SMB2_create_recv() │ │ 解析响应 → 获取 Server FID │ │ 解析 Oplock/Lease 状态 │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS VFS 适配层 - 收尾初始化 │ │ │ │ cifs_init_file_info() │ │ ➜ 分配 cifsFileInfo (绑定FID/Oplock) │ │ ➜ 关联 file-private_data │ │ ➜ 填充 inode 属性 (size, mtime) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ VFS 层 - 返回 │ │ │ │ 返回 file 结构体 fd │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 用户进程空间 │ │ │ │ open() 执行完成返回 fd │ └─────────────────────────────────────────────────────────────────────┘最核心的 3 个函数cifs_open()CIFS VFS 适配层的open 入口所有文件打开都走这里。SMB2_open()VFS 层 → 协议层的桥梁负责把 Linux open 参数翻译成 SMB 协议。SMB2_create_send()真正发送网络请求到 Windows/Samba 服务器。VFS 适配层在 open 中的核心工作把POSIX open 标志O_CREAT/O_RDWR→ 翻译成SMB Create 指令把Linux UID/GID→ 映射成服务端权限把UTF-8 文件名→ 转成 SMB 协议要求的UTF-16LE申请Oplock/Lease缓存锁提升后续读写性能绑定file结构体与服务端FID
linux cifs架构
Linux CIFS 架构是内核级的SMB/CIFS 客户端 VFS 实现cifs.ko完整对接 Linux VFS 层向下封装 SMB 协议栈与网络 I/O向上提供标准文件系统接口支持 SMB1/CIFS、SMB2、SMB3含 3.1.1等。CIFS 完整组件架构总图┌─────────────────────────────────────────────────────────────────────┐ │ 用户态工具层 │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │ │ mount.cifs │ │ cifs-utils │ │ cifs.upcall │ │ │ │ (挂载) │ │ (查询/ACL) │ │ (Kerberos/DFS) │ │ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ VFS 虚拟文件系统 │ │ open/read/write/stat/fsync… │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ 【 CIFS VFS 适配层 】 │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ Super Block │ │ Inode Operations│ │ File Operations │ │ │ │ cifs_sb_info │ │ lookup/create │ │ read/write/fsync│ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ ┌─────────────────┐ ┌─────────────────────────────────────────┐ │ │ │ Dentry Cache │ │ 语义转换模块 │ │ │ │ d_revalidate │ │ 编码/权限/时间戳/POSIX→Windows │ │ │ └─────────────────┘ └─────────────────────────────────────────┘ │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ CIFS 协议核心层 │ │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ │ │ 会话管理 │ │ 树连接管理 │ │ 请求调度队列 │ │ │ │ cifs_ses │ │ cifs_tcon │ │ mid_q_entry │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ │ ┌─────────────────────────────────────┐ ┌─────────────────────┐ │ │ │ SMB 协议引擎 │ │ 缓存 Oplock/Lease │ │ │ │ SMB1/SMB2/SMB3 封包/解包 │ │ pagecache/inode缓存 │ │ │ └─────────────────────────────────────┘ └─────────────────────┘ │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ 网络传输层 │ │ TCP socket 端口445 签名/加密(seal) │ └───────────────────────────────────┬─────────────────────────────────┘ │ ┌───────────────────────────────────▼─────────────────────────────────┐ │ 远端Windows / Samba Server │ └─────────────────────────────────────────────────────────────────────┘用户态组件mount.cifs发起挂载、解析参数、调用内核 mountcifs-utils查看状态、设置 ACLcifs.upcall处理 Kerberos 认证、DFS 路径解析CIFS VFS 适配层核心对接层super block管理整个挂载实例inode opslookup、create、mkdir、rmdir、setattrfile opsread、write、fsync、mmapdentry目录项缓存加速路径查找语义转换UTF8 ↔ UTF16、POSIX ↔ Windows 权限、时间戳转换CIFS 协议核心层cifs_ses用户会话认证cifs_tcon共享树连接mid_q_entry请求队列、异步发送、超时重试SMB 引擎SMB2/SMB3 封包解包Oplock/Lease缓存锁保证多客户端一致性网络层TCP 445签名sign、加密seal用户空间层挂载工具mount.cifscifs-utils负责解析挂载参数、处理认证、调用内核mount接口。管理工具smbinfo、setcifsacl、cifs.upcallKerberos/DFS 解析。配置与调试/proc/fs/cifs/Stats、DebugData、cifsFYI、/sys/module/cifs/parameters/。VFS 适配层核心对接层实现 Linux VFS 标准接口super_operations、file_operations、inode_operations、dentry_operations。职责管理super_block、inode、dentry、file等 VFS 对象。处理权限、缓存、路径查找、文件锁、扩展属性xattr、ACL 等。映射 POSIX 语义到 SMB 协议如chmod、symlink、hardlink。它位于用户进程 ↓ VFS 虚拟文件系统open/read/write/stat... ↓ 【 CIFS VFS 适配层 】← 你现在要看的核心 ↓ CIFS 协议引擎SMB2/SMB3 封包、会话、连接 ↓ TCP 网络struct super_operations—— 超级块操作文件系统级别的操作读索引节点alloc_inode释放索引节点destroy_inode同步文件系统sync_fs统计空间statfsCIFS 对应实现cifs_super_operations作用管理 CIFS 挂载实例struct cifs_sb_info管理与服务器的树连接struct cifs_tcon管理 UID/GID 映射、缓存参数struct inode_operations—— inode 操作文件 / 目录元数据操作创建文件create创建目录mkdir查找lookup链接 / 软链接link、symlink修改权限 / 属主setattrCIFS 实现cifs_inode_operationscifs_dir_inode_operations核心函数cifs_lookup: 路径查找 → 发 SMB Query/Find 指令cifs_create: 创建文件 → 发 SMB Createcifs_mkdir: 建目录 → SMB Create 目录struct file_operations—— 文件 I/O 操作用户最常调用的 read/writeread_iterwrite_itermmapfsynclockCIFS 实现cifs_file_operations核心函数cifs_file_read_itercifs_file_write_itercifs_fsyncstruct dentry_operations—— 目录项缓存操作主要是缓存策略d_revalidate: 验证 dentry 是否还有效CIFS 实现cifs_dentry_operationscifs_d_revalidate作用判断本地缓存的目录项是否与服务端一致避免过期。struct cifs_sb_info挂载超级块私有数据每个 mount 一个指向struct cifs_tcon树连接UID/GID 映射缓存开关oplock、目录缓存SMB 版本、安全模式struct cifs_inode_infoinode 私有数据服务端的 file ID /unique ID缓存的属性atime/mtime/ctime/size缓存标记是否脏、是否需要重新获取oplock/lease 状态struct cifsFileInfofile 结构体私有数据服务端的 FID /open 句柄oplock 状态读 / 写偏移CIFS 核心逻辑层协议引擎会话与连接管理struct cifs_ses会话、struct cifs_tcon树连接 / 共享、struct TCP_Server_Info服务器连接。协议协商自动 / 手动选择 SMB 方言默认 SMB3.1.1、协商能力Unix 扩展、POSIX 扩展、加密、签名。请求调度异步请求队列、并发控制、重试与超时。支持multichannelSMB3 多通道、persistent handles等高级特性。缓存子系统页缓存Page Cache与本地文件系统一致读写先经页缓存提升性能。Oplock/Lease机会锁 / 租约服务器授予客户端缓存权限独占 / 共享减少网络往返。目录 / Inode 缓存LookupCache加速路径查找。安全子系统认证NTLMv2、Kerberoscifs.upcall、匿名 / 访客。安全数据包签名sign、传输加密sealSMB3。网络传输层TCP 连接默认端口 445Direct Hosting旧版 139NBT。I/O 模型异步非阻塞、多路复用支持大窗口与批量请求。数据处理SMB 报文封包 / 解包、Marshaling/Unmarshaling、Unicode 转换、校验和。核心数据结构结构核心职责struct cifs_sb_info挂载点私有数据关联super_block、tcon、缓存参数struct cifs_tcon树连接共享对应一个//server/share含权限、UID/GID 映射struct cifs_ses用户会话含认证信息、安全上下文、服务器能力struct TCP_Server_Info服务器连接管理 socket、请求队列、多通道struct cifsFileInfo打开文件句柄关联file、FID、Oplock 状态struct mid_q_entry待响应的 SMB 请求管理超时、回调、重试I/O 路径读写流程读流程用户调用read()→ VFS →cifs_file_read_iter()。检查页缓存命中则直接返回未命中则发起 SMBRead请求。核心层封装Read请求 → 网络层发送 → 等待服务器响应。收到数据 → 填入页缓存 → 拷贝到用户空间 → 更新缓存状态Oplock。写流程用户调用write()→ VFS →cifs_file_write_iter()。数据写入页缓存延迟写。脏页回写fsync/flush/ 内存压力封装 SMBWrite请求 → 网络发送 → 等待确认。若持有独占 Oplock可批量写否则需同步写并更新服务器状态。CIFS 的调用链以 read 为例user read() ↓ sys_read ↓ vfs_read ↓ cifs_file_read_iter 【VFS 适配层入口】 ↓ 1. 检查页缓存 page cache 命中 → 直接拷贝 不命中 → 下发 SMB READ ↓ cifs_send_recv_msg 【进入协议层】 ↓ SMB2_READ 请求封包 → 网络 → 服务器 ↓ 填页缓存 → 返回用户写流程同理先写页缓存再由回写线程下发 SMB2_WRITE。CIFS 适配层的缓存机制CIFS 大量依赖 VFS 缓存以提升性能dentry 缓存lookup结果缓存由d_revalidate保证一致性inode 缓存缓存文件大小、mtime、属性减少 SMB Query Infopage cache读写都走页缓存由 oplock/lease 保证多客户端一致性oplock/lease机会锁适配层通过cifs_get_oplockcifs_release_oplock向服务端申请缓存权限。CIFS VFS 层架构总图┌─────────────────────────────────────────────────────────┐ │ 用户进程 系统调用 │ │ open/read/write/stat/mkdir/rmdir/rename/fsync... │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ VFS 虚拟文件系统层 │ │ 统一接口syscall → vfs_open → vfs_read → ... │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ 【CIFS VFS 适配层】 │ ← 你要的核心 │ ┌─────────────────────────────────────────────────┐ │ │ │ 文件系统注册 超级块管理 │ │ │ │ cifs_fs_type → cifs_mount → cifs_sb_info │ │ │ │ struct super_operations: cifs_super_ops │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ Inode 操作层 │ │ │ │ struct inode_operations: cifs_inode_ops │ │ │ │ lookup/create/mkdir/rmdir/setattr/link │ │ │ │ struct cifs_inode_info │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ Dentry 缓存层 │ │ │ │ struct dentry_operations: cifs_dentry_ops │ │ │ │ d_revalidate: 校验缓存是否过期 │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ 文件 I/O 操作层 │ │ │ │ struct file_operations: cifs_file_ops │ │ │ │ read_iter / write_iter / fsync / mmap / lock │ │ │ │ struct cifsFileInfo │ │ │ └─────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────┐ │ │ │ POSIX ↔ SMB 语义转换层 │ │ │ │ 权限映射、时间戳转换、编码转换(UTF8↔UTF16) │ │ │ │ ACL 映射、路径大小写、符号链接适配 │ │ │ └─────────────────────────────────────────────────┘ │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ CIFS 协议引擎层 │ │ SMB2/SMB3 封包、会话管理、连接、请求队列、Oplock/Lease │ │ struct cifs_tcon / cifs_ses / TCP_Server_Info │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ 网络传输层 │ │ TCP socket、端口445、加密(seal) │ └───────────────────────────┬─────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────┐ │ Windows / Samba 服务器 │ └─────────────────────────────────────────────────────────┘CIFS open () 完整调用栈流程图这是从用户进程 → VFS → CIFS VFS 适配层 → 协议层 → 网络 → 服务器的完整、精准、内核源码级调用栈流程图完全对应 Linux 内核cifs.ko真实执行路径。┌─────────────────────────────────────────────────────────────────────┐ │ 用户进程空间 │ │ │ │ open(/mnt/cifs/file.txt, O_RDWR) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 系统调用层 (syscall) │ │ │ │ sys_open / do_sys_open │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ VFS 虚拟文件系统层 │ │ │ │ do_filp_open() │ │ path_openat() │ │ vfs_open() │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 【CIFS VFS 适配层 - 核心入口】 │ ← 对接VFS │ │ │ inode-i_fop-open() │ │ ╔═══════════════════════════════╗ │ │ ║ cifs_open() 【主函数】 ║ │ │ ╚═══════════════════════════════╝ │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS VFS 适配层 - 准备与校验 │ │ │ │ 1. 获取 cifs_sb_info (挂载私有数据) │ │ 2. 获取 cifs_tcon (树连接/共享) │ │ 3. 解析 flags (O_CREAT, O_TRUNC 等) │ │ 4. 权限检查 (uid/gid映射) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS VFS 适配层 → 调用协议层接口 │ │ │ │ cifs_nt_open() / SMB2_open() │ │ ➜ 编码转换UTF-8 → UTF-16LE 文件名 │ │ ➜ 封装 SMB2_CREATE 请求参数 │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS 协议引擎层 │ │ │ │ SMB2_create_send() 【发送SMB创建请求】 │ │ cifs_send_async_read() │ │ mid_q_entry 管理 (请求队列/超时) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 网络传输层 │ │ │ │ TCP Socket (端口 445) │ │ ➜ 发送 SMB2_CREATE 报文 │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ Windows / Samba 服务器 │ │ │ │ 处理文件创建/打开 → 返回 File ID (FID) │ │ 返回 Oplock/Lease (缓存授权) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 协议层 - 接收响应 │ │ │ │ SMB2_create_recv() │ │ 解析响应 → 获取 Server FID │ │ 解析 Oplock/Lease 状态 │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ CIFS VFS 适配层 - 收尾初始化 │ │ │ │ cifs_init_file_info() │ │ ➜ 分配 cifsFileInfo (绑定FID/Oplock) │ │ ➜ 关联 file-private_data │ │ ➜ 填充 inode 属性 (size, mtime) │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ VFS 层 - 返回 │ │ │ │ 返回 file 结构体 fd │ └───────────────────────────┬─────────────────────────────────────────┘ │ ┌───────────────────────────▼─────────────────────────────────────────┐ │ 用户进程空间 │ │ │ │ open() 执行完成返回 fd │ └─────────────────────────────────────────────────────────────────────┘最核心的 3 个函数cifs_open()CIFS VFS 适配层的open 入口所有文件打开都走这里。SMB2_open()VFS 层 → 协议层的桥梁负责把 Linux open 参数翻译成 SMB 协议。SMB2_create_send()真正发送网络请求到 Windows/Samba 服务器。VFS 适配层在 open 中的核心工作把POSIX open 标志O_CREAT/O_RDWR→ 翻译成SMB Create 指令把Linux UID/GID→ 映射成服务端权限把UTF-8 文件名→ 转成 SMB 协议要求的UTF-16LE申请Oplock/Lease缓存锁提升后续读写性能绑定file结构体与服务端FID