O que l_i_version em um inode ext4 realmente faz?

0

Tentando entender os aspectos internos e os segredos relacionados ao entendimento do ext4 eu estava lendo no ext4.wiki . O (s) autor (es) fez o melhor para mostrar as estruturas usadas (como o layout / struct de um ext4_inode), mas algumas vezes parece que elas ficam sem ideias.

Pesquisando em que l_i_version é usado, descobri o seguinte:

l_i_version Version (High 32-bits of the i_generation field?)

Mais tarde, no mesmo struct ext4_inode aparece também um campo:

__le32  i_version_hi;   /* high 32 bits for 64-bit version */

que parece ser os 32 bits mais altos para os 32bits ainda altos.

Alguém pode acender uma luz sobre isso?

    
por humanityANDpeace 10.03.2017 / 16:09

1 resposta

3

don_crissti encontrou o original submissão de correção para a extensão de versões do inode para 64 bits, o que explica o uso desses campos:

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 é uma macro para l_i_version (no Linux ); isso fornece os baixos 32 bits da versão do inode. Se o tamanho do inode for maior, i_version_hi fornecerá os 32 bits mais altos.

i_version é a versão do inode, que é incrementada toda vez que o inode é modificado (veja mount(8) .

    
por 10.03.2017 / 16:28

Tags