ext4 inode 中的 l_i_version 实际上有什么作用?

ext4 inode 中的 l_i_version 实际上有什么作用?

试图了解与理解 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)

相关内容