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).

관련 정보