refactor(vfs): 重构statx系统调用的实现 (#1149)

- 将kstat的获取,与posix statx的获取进行分离.
- 修复statx没有处理dirfd的bug
- 在Metadata结构体中新增btime字段,表示文件的创建时间
- 更新多个文件系统的metadata实现,添加对btime的支持
- 引入derive_builder crate以简化Metadata构建过程
- 重构vfs模块,将core重命名为vcore以避免命名冲突
- 实现vfs_statx和vfs_getattr函数,支持更详细的文件属性查询
- 新增LookUpFlags定义,用于路径查找时的标志位

Signed-off-by: longjin <longjin@dragonos.org>
This commit is contained in:
LoGin
2025-05-09 14:46:10 +08:00
committed by GitHub
parent bc9bb9607f
commit 0b89d7130e
25 changed files with 641 additions and 221 deletions

View File

@ -31,7 +31,7 @@ use crate::{
devfs::{devfs_register, DevFS, DeviceINode},
kernfs::KernFSInode,
vfs::{
core::generate_inode_id, syscall::ModeType, utils::DName, FilePrivateData, FileSystem,
syscall::ModeType, utils::DName, vcore::generate_inode_id, FilePrivateData, FileSystem,
FileType, IndexNode, Metadata,
},
},
@ -198,6 +198,7 @@ impl Ps2MouseDevice {
atime: PosixTimeSpec::default(),
mtime: PosixTimeSpec::default(),
ctime: PosixTimeSpec::default(),
btime: PosixTimeSpec::default(),
file_type: FileType::CharDevice, // 文件夹block设备char设备
mode: ModeType::from_bits_truncate(0o644),
nlinks: 1,

View File

@ -22,7 +22,7 @@ use crate::{
filesystem::{
devfs::{devfs_register, DevFS, DeviceINode},
vfs::{
core::generate_inode_id, file::FileMode, syscall::ModeType, FilePrivateData,
file::FileMode, syscall::ModeType, vcore::generate_inode_id, FilePrivateData,
FileSystem, FileType, IndexNode, Metadata,
},
},
@ -86,6 +86,7 @@ impl LockedPS2KeyBoardInode {
atime: PosixTimeSpec::default(),
mtime: PosixTimeSpec::default(),
ctime: PosixTimeSpec::default(),
btime: PosixTimeSpec::default(),
file_type: FileType::CharDevice, // 文件夹block设备char设备
mode: ModeType::from_bits_truncate(0o666),
nlinks: 1,
@ -155,6 +156,7 @@ impl IndexNode for LockedPS2KeyBoardInode {
inode.metadata.atime = metadata.atime;
inode.metadata.mtime = metadata.mtime;
inode.metadata.ctime = metadata.ctime;
inode.metadata.btime = metadata.btime;
inode.metadata.mode = metadata.mode;
inode.metadata.uid = metadata.uid;
inode.metadata.gid = metadata.gid;