Skip to content

[r2cn] 为 SlayerFS 添加真实权限持久化与返回 #233

@genedna

Description

@genedna

[任务] 为 SlayerFS 添加真实权限持久化与返回

[任务分值] 60 分

[背景描述]
当前文件权限(mode)未真正持久化或被忽略,导致 chmod 后 stat 显示不符,POSIX chmod 测试失败/需跳过。为提升与标准工具兼容性,需要将权限信息纳入元数据并在修改后持久化。使 chmod 测试不再被强制跳过,返回 stat 时权限与修改一致。

[需求描述]

  1. 扩展元数据表/结构:为节点记录 mode(u16 或 u32),初始创建使用默认 0644(文件)/0755(目录)。
  2. 在创建接口中写入初始权限;在 stat / getattr 返回时读取该字段。
  3. 新增 chmod(path, new_mode) 接口:只更新元数据,不做复杂的权限语义(不处理 sticky / setuid / setgid,超出范围直接掩码 0777)。
  4. FUSE setattr/setattr_in 解析:当包含 FATTR_MODE 时映射到 chmod。
  5. 添加单元测试:
    • 创建文件后默认权限正确(不要求与 umask 同步,写英文说明)。
    • chmod 修改后 stat 返回新权限。
  6. 处理并发:简单使用事务或原子更新(数据库/etcd 分别实现)。
  7. 文档更新:在 docs/ 添加 permissions.md 说明当前支持范围与不支持项(如不支持 ACL、umask、特殊位)。
  8. 安全限制:过滤掉 setuid/setgid/sticky(直接清除对应位并注释说明)。
  9. 错误处理:无此路径返回 ENOENT;非法模式写入前清理位后继续。
  10. FUSE 层:对未实现的复杂属性(如 chown)返回 ENOSYS,英文 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