试图了解与理解 ext4 相关的内部结构和秘密,我正在阅读ext4.wiki。作者尽最大努力展示所使用的结构(例如 ext4_inode 的布局/结构),但有时他们似乎已经没有想法了。
查了一下l_i_version
用途,我发现了这个:
l_i_version 版本(i_ Generation 字段的高 32 位?)
稍后在同一struct ext4_inode
区域中还会出现一个字段:
__le32 i_version_hi; /* high 32 bits for 64-bit version */
这似乎是高 32 位到已经高 32 位。
有人可以对此进行遮蔽吗?
答案1
唐克里斯斯蒂找到了原来的补丁提交将 inode 版本扩展到 64 位,解释了这些字段的用途:
inode->i_version = le32_to_cpu(raw_inode->i_disk_version);
if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
inode->i_version |=
(__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
}
i_disk_version
是一个宏对于l_i_version
(在 Linux 上);这提供了 inode 版本的低 32 位。如果 inode 大小较大,则i_version_hi
提供高 32 位。
i_version
是 inode 版本,每次修改 inode 时都会递增(请参阅mount(8)
。