Skip to content

[r2cn] 在 SlayerFS 元数据层新增对 Link / Symlink 节点类型的支持 #232

@genedna

Description

@genedna

[任务] 在 slayerfs 元数据层新增对 Link / Symlink 节点类型的支持

[任务分值] 60 分

[背景描述] 当前 SlayerFS 仅支持普通文件与目录,不支持硬链接与符号链接,导致基础 POSIX 测试(hardlink/symlink)失败。为提高兼容性,需要在元数据模型中引入可表示两类链接的节点,并在 VFS 层提供最小实现。实现基础的创建、解析、删除及解析跳转),使 FUSE 层的 ln / ln -s 操作不再返回 ENOSYS。

[需求描述]

  1. 在元数据模型中增加节点类型枚举值:File、Directory、Symlink、Hardlink(或 Link):
    • Symlink:存储目标路径(原始字符串),解析时不做规范化(后续扩展再处理)。
    • Hardlink:共享同一底层 inode/对象标识(引用计数递增/递减)。
  2. 新增接口:create_symlink(parent, name, target)、create_hardlink(existing_path, new_parent, new_name)
  3. unlink 行为:Symlink 直接删除;Hardlink 引用计数为 1 时删除底层对象,否则只减计数。
  4. open / read 路径解析:遇到 Symlink 按一次跳转解析(不做环检测,TODO 标注)。
  5. 在 FUSE 层对 symlink / link 请求调用上述接口;现有返回 ENOSYS 处替换为具体实现。
  6. 添加最小单元测试:
    • 创建 symlink 后读取目标文件内容成功
    • 创建两个 hardlink,引用计数正确,删除一个仍可访问另一个
  7. 添加英文文档说明:docs/ 目录新增 link_symlink.md,描述语义与限制。
  8. 不实现跨分区校验与复杂循环检测(用 TODO 英文标注)。

[代码标准]

  1. 所有 PR 提交必须 Signed-off-by 且使用 GPG 签名。
  2. 所有 PR 需通过 GitHub Actions。
  3. 注释与公共 API 文档英文书写。
    [PR 提交地址] 提交到 rk8s 仓库的 main 分支 slayerfs 目录。

[开发指导]

  1. 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
  2. 先扩展元数据结构,再实现 chmod 接口与 FUSE 层映射,最后补充测试。

[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-rk8s 频道和导师交流。

  1. Quanyi Ma [email protected]

[备注]

  1. 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务r2cn 开源实习计划 - 学生注册与审核

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    Status

    No status

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions