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_versioninodeバージョンは、inodeが変更されるたびに増加します(参照:mount(8)

関連情報