-
Notifications
You must be signed in to change notification settings - Fork 36
Open
Labels
Milestone
Description
[任务] 为 SlayerFS 添加真实权限持久化与返回
[任务分值] 60 分
[背景描述]
当前文件权限(mode)未真正持久化或被忽略,导致 chmod 后 stat 显示不符,POSIX chmod 测试失败/需跳过。为提升与标准工具兼容性,需要将权限信息纳入元数据并在修改后持久化。使 chmod 测试不再被强制跳过,返回 stat 时权限与修改一致。
[需求描述]
- 扩展元数据表/结构:为节点记录 mode(u16 或 u32),初始创建使用默认 0644(文件)/0755(目录)。
- 在创建接口中写入初始权限;在 stat / getattr 返回时读取该字段。
- 新增 chmod(path, new_mode) 接口:只更新元数据,不做复杂的权限语义(不处理 sticky / setuid / setgid,超出范围直接掩码 0777)。
- FUSE setattr/setattr_in 解析:当包含 FATTR_MODE 时映射到 chmod。
- 添加单元测试:
- 创建文件后默认权限正确(不要求与 umask 同步,写英文说明)。
- chmod 修改后 stat 返回新权限。
- 处理并发:简单使用事务或原子更新(数据库/etcd 分别实现)。
- 文档更新:在 docs/ 添加 permissions.md 说明当前支持范围与不支持项(如不支持 ACL、umask、特殊位)。
- 安全限制:过滤掉 setuid/setgid/sticky(直接清除对应位并注释说明)。
- 错误处理:无此路径返回 ENOENT;非法模式写入前清理位后继续。
- FUSE 层:对未实现的复杂属性(如 chown)返回 ENOSYS,英文 TODO 标注。
[代码标准]
- 所有 PR 提交必须 Signed-off-by 且使用 GPG 签名。
- 所有 PR 需通过 GitHub Actions。
- 注释与公共 API 文档英文书写。
[PR 提交地址] 提交到 rk8s 仓库的 main 分支 slayerfs 目录。
[开发指导]
- 认领任务参考 r2cn 开源实习计划 - 任务认领与确认;
- 先扩展元数据结构,再实现 chmod 接口与 FUSE 层映射,最后补充测试。
[导师及邮箱] 请申请此题目的同学使用邮件联系导师,或加入到 R2CN Discord 后在 #p-rk8s 频道和导师交流。
- Quanyi Ma [email protected]
[备注]
- 认领实习任务的同学,必须完成测试任务和注册流程,请参考: r2cn 开源实习计划 - 测试任务 和 r2cn 开源实习计划 - 学生注册与审核
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
No status