Intereting Posts
Почему LUKS нужно генерировать хеш-значения? Выполнить ./script.sh vs bash script.sh – отклонено разрешение Изменения внешнего вида терминала больше не работают Запуск 64-битной виртуальной Linux на любом чипе AMD / Intel без поддержки VT-X Настройка командной строки Shell? Перенос папки на NAS-сервер Nemo не может открыть SMB-ресурс: «Время ожидания подключения» Как я могу сбросить или опустить серийный номер, используемый в записи «SOA» сервера DNS BIND? Не удалось выполнить настройку VConsole: виртуальная консоль / dev / tty0 не находится в K_XLATE или K_UNICODE Добавлен файл anaconda2 lib в LD_LIBRARY_PATH, в результате появляется предупреждение «без информации о версии» «Нет открытого ключа» на apt-get update как удалить двойные струны с помощью sed grep awk Ошибка выдачи скрипта «=: не найдено» Может ли IFS (внутренний разделитель полей) функционировать как отдельный разделитель для нескольких последовательных разделительных символов? Найти различные строки в отдельных строках файла

Что делает l_i_version в extode inode?

Пытаясь оторваться от внутренних дел и секретов, связанных с пониманием ext4, я читал на ext4.wiki . Автор (ы) сделал все возможное, чтобы показать используемые структуры (например, layout / struct ext4_inode), хотя иногда кажется, что у них заканчиваются идеи.

Глядя на то, что используется l_i_version , я нашел это:

Версия l_i_version (Высокие 32-бит поля i_generation?)

Позже в той же struct ext4_inode появляется также поле:

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

который, кажется, должен быть высоким 32 бит к уже уже высоким 32 бит.

Может ли кто-нибудь затмить свет?

don_crissti обнаружил исходную заявку на исправление для расширения версий 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); это обеспечивает низкие 32 бита версии inode. Если размер inode больше, i_version_hi обеспечивает высокие 32 бита.

i_version – это версия inode, которая увеличивается каждый раз при изменении индексного дескриптора (см. mount(8) .