DragonOS icon indicating copy to clipboard operation
DragonOS copied to clipboard

feat request: 实现`SYS_GETXATTR`/`SYS_FGETXATTR`/`SYS_LGETXATTR`系统调用

Open fslongjin opened this issue 5 months ago • 1 comments

您的功能请求是否与问题/故障有关?请描述一下。 sed -i命令需要SYS_FGETXATTR

描述您想要的解决方案 实现这上面的三个系统调用,并且添加测试用例,因为他们是一组的,底层逻辑是一样的。

fslongjin avatar Jul 28 '25 08:07 fslongjin

Doing!

xboHodx avatar Jul 28 '25 09:07 xboHodx

@claude 这些功能在master分支是不是已经实现了?

fslongjin avatar Dec 15 '25 04:12 fslongjin

Claude finished @fslongjin's task in 6m 35s —— View job


分析完成

@fslongjin 根据对DragonOS代码库的全面检查,SYS_GETXATTRSYS_FGETXATTRSYS_LGETXATTR系统调用在master分支已经完整实现

实现证据

1. 系统调用定义

  • x86_64架构 (kernel/src/arch/x86_64/syscall/nr.rs:200-202):
    • SYS_GETXATTR: 191
    • SYS_LGETXATTR: 192
    • SYS_FGETXATTR: 193
  • RISC-V64/LoongArch64架构也有相应定义(系统调用号不同)

2. 完整实现文件

所有三个系统调用都有独立实现:

  • kernel/src/filesystem/vfs/syscall/sys_getxattr.rs - SYS_GETXATTR 处理程序
  • kernel/src/filesystem/vfs/syscall/sys_fgetxattr.rs - SYS_FGETXATTR 处理程序
  • kernel/src/filesystem/vfs/syscall/sys_lgetxattr.rs - SYS_LGETXATTR 处理程序

3. 核心工具函数

kernel/src/filesystem/vfs/syscall/xattr_utils.rs 提供通用实现:

  • path_getxattr(): 路径方式获取扩展属性(用于getxattrlgetxattr
  • fd_getxattr(): 文件描述符方式获取扩展属性(用于fgetxattr
  • do_getxattr(): 底层实际执行函数

4. 文件系统支持

  • ext4文件系统 (kernel/src/filesystem/ext4/inode.rs) 已实现getxattr()setxattr()方法
  • 通过another_ext4库调用底层ext4文件系统的xattr功能
  • 支持缓冲区大小探测(size=0时返回所需长度)

5. 完整测试套件

user/apps/c_unitest/test_set_get_xattr.c 包含完整的xattr测试:

  • 路径型setxattr/getxattr测试
  • 符号链接lsetxattr/lgetxattr测试(不跟随链接)
  • 文件描述符fsetxattr/fgetxattr测试
  • 错误分支测试:XATTR_CREATE/XATTR_REPLACE标志、读取不存在属性返回ENODATA

6. 系统集成

这些模块已在kernel/src/filesystem/vfs/syscall/mod.rs:115-121中导入,完全集成到系统调用表中。

功能特性

  • 符号链接处理: lgetxattr不跟随符号链接(lookup_flags=0),而getxattr会跟随符号链接
  • 错误处理: 支持标准错误码:ENODATAEEXISTERANGEENOSYS
  • 标志支持: 支持XATTR_CREATE (0x1) 和 XATTR_REPLACE (0x2) 标志
  • 架构兼容: 支持x86_64、RISC-V64、LoongArch64架构(系统调用号不同)

结论

issue #1242中请求的三个系统调用(SYS_GETXATTR/SYS_FGETXATTR/SYS_LGETXATTR)已经完整实现并集成到DragonOS中,支持ext4文件系统的扩展属性操作。因此,sed -i命令所需的SYS_FGETXATTR功能已可用。

建议: 由于功能已实现,本issue可以关闭。