Skip to content
GitLab
Projects Groups Topics Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • O OSKernel2026-StellarOS
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributor statistics
    • Graph
    • Compare revisions
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Terraform modules
  • Monitor
    • Monitor
    • Metrics
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • StellarOS
  • OSKernel2026-StellarOS
  • Merge requests
  • !27

完善 VFS 层接口,实现文件系统高级特性(同步、统计、硬链接、符号链接、动态挂载/卸载)。

  • Review changes

  • Download
  • Patches
  • Plain diff
Merged StellarOS requested to merge ext into main Apr 12, 2026
  • Overview 2
  • Commits 1
  • Pipelines 0
  • Changes 19

Created by: hjg0603

  1. os/src/fs/vfs.rs — VfsNode trait 扩展

添加 sync(&self) -> isize 方法(默认返回 0),让文件节点可以将数据同步到磁盘 2. os/src/fs/mount.rs — MountedFs trait 扩展 + FsStatInfo

MountedFs trait 添加 statfs() 方法,返回 FsStatInfo 文件系统统计信息 MountedFs trait 添加 link(old, new) 方法(硬链接) MountedFs trait 添加 symlink(target, linkpath) 方法(符号链接创建) MountedFs trait 添加 readlink(path) 方法(读取符号链接目标) 新增 FsStatInfo 结构体(#[repr(C)],与 Linux struct statfs 布局一致) 3. os/src/fs/fat32_mount.rs — FAT32 适配

实现 statfs() 返回 FAT32 统计信息(f_type=0x4d44) 实现 link()/symlink() 返回 -38(ENOSYS,FAT32 不支持) 4. os/src/fs/ext4/fs.rs — EXT4 核心功能

新增 link_file(old_path, new_path) -> bool:硬链接实现,增加 i_links_count 并在目标目录添加目录项 新增 read_symlink(path) -> Option:读取符号链接目标,支持快速符号链接(≤60 字节存 i_block)和慢速符号链接(数据块读取) 5. os/src/fs/ext4_mount.rs — EXT4 MountedFs 适配

link() 调用 fs.lock().link_file() 实现硬链接 readlink() 调用 fs.lock().read_symlink() 读取符号链接 statfs() 从超级块读取统计信息(f_type=0xEF53) 6. os/src/drivers/block.rs — 块设备层

新增 pub fn get_block_device() -> Arc 公开函数,供 sys_mount 获取全局块设备 7. os/src/syscall/mod.rs — 系统调用分发

新增 SYSCALL_MOUNT: usize = 40 和 SYSCALL_UMOUNT2: usize = 39 常量 在 match 分发表中添加 SYSCALL_MOUNT 和 SYSCALL_UMOUNT2 的分发入口 8. os/src/syscall/fs.rs — 系统调用实现

重写 sys_fsync(fd):从 fd 获取 VfsNode,调用 node.sync() 真正同步数据 重写 sys_fdatasync(fd):当前等同于 sys_fsync 重写 sys_statfs(path, buf):通过 MOUNT_TABLE.lookup() 找到挂载的文件系统,调用 statfs() 获取真实统计信息 重写 sys_fstatfs(fd, buf):通过 fd 路径查找挂载点,调用 statfs() 重写 sys_linkat():调用 MountedFs::link() 创建硬链接 重写 sys_readlinkat():调用 MountedFs::readlink() 读取符号链接 新增 sys_mount(source, target, fstype, flags, data):动态挂载文件系统,支持 "fat32" 和 "ext4" 两种类型 新增 sys_umount2(target, flags):卸载文件系统

Assignee
Assign to
Reviewers
Request review from
Time tracking
Source branch: ext