storage R&D guy.
全部博文(1000)
分类: LINUX
2014-06-17 20:30:02
Ext4 的EXT4_IOC_GETVERSION命令用于获取文件的版本号(inode.i_generation),将获取的文件版本号传给ioctl的第三个参数unsigned int arg:
ioctl(fd, EXT4_IOC_GETVERSION, arg )
Ext4 的EXT4_IOC_SETVERSION命令用于设置文件的版本号,将要设置的最终版本号作为ioctl的第三个参数unsigned int arg传入ioctl函数中:
ioctl(fd, EXT4_IOC_SETVERSION, arg )
(1) 首先确定用户对文件具有访问权限且对文件所在的文件系统具有写权限(因为设置inode标志成功会引起元数据更新操作)。并将用户设置的文件版本号(ioctl命令的第三个参数)拷贝到内核空间。
(2) 发起一个日志事务,用于后面提交日志事务时更新inode;
(3) 在日志中建立元数据更新事务,用于更新inode元数据;
(4) 更新inode元数据,设置新的文件版本号,更新inode到磁盘;
(5) 结束日志事务处理;
(6) 结束对文件系统的写操作;