Ext4文件系统架构分析(三) ——ioctl源码分析之设置/获取文件版本号
1. EXT4_IOC_GETVERSION获取文件的版本号
Ext4 的EXT4_IOC_GETVERSION命令用于获取文件的版本号(inode.i_generation),将获取的文件版本号传给ioctl的第三个参数unsigned int arg:
ioctl(fd, EXT4_IOC_GETVERSION, arg )
2. EXT4_IOC_SETVERSION设置文件的版本号
Ext4 的EXT4_IOC_SETVERSION命令用于设置文件的版本号,将要设置的最终版本号作为ioctl的第三个参数unsigned int arg传入ioctl函数中:
ioctl(fd, EXT4_IOC_SETVERSION, arg )
3. 设置文件版本号的操作过程
(1) 首先确定用户对文件具有访问权限且对文件所在的文件系统具有写权限(因为设置inode标志成功会引起元数据更新操作)。并将用户设置的文件版本号(ioctl命令的第三个参数)拷贝到内核空间。
(2) 发起一个日志事务,用于后面提交日志事务时更新inode;
(3) 在日志中建立元数据更新事务,用于更新inode元数据;
(4) 更新inode元数据,设置新的文件版本号,更新inode到磁盘;
(5) 结束日志事务处理;
(6) 结束对文件系统的写操作;