12 октября 2026 года вышел релиз-кандидат ядра Linux 7.3-rc7. Линус Торвальдс отметил, что предпочёл бы видеть меньший rc, но ничто в нём не выглядит причиной откладывать финальный релиз — он по-прежнему запланирован на следующие выходные, если не появится что-то новое. Среди изменений, попавших в основную ветку на той же неделе, — объявление устаревшим режима монтирования ext4 data=journal. Режим будет полностью удалён в начале 2028 года.
Что именно изменилось
Опция data=journal не удалена и не помечена как недопустимая. При монтировании с ней ядро печатает предупреждение о том, что режим устарел и поддержка будет удалена в январе 2028 года, после чего монтирование продолжается. Режим по-прежнему распознаётся как отдельное значение: при монтировании ext4 проверяется, что выбран именно режим журналирования данных, и для него выполняется ряд действий.
Опция data задана как перечисление параметров монтирования, и в таблице опций присутствует запись {Opt_data, 0, MOPT_NO_EXT2} — то есть она принимается и обрабатывается, а не помечена как удалённая.
Что происходит при монтировании с data=journal
При монтировании файловой системы ext4 с опцией data=journal ядро выполняет следующее:
- печатает предупреждение об устаревании и однократное предупреждение о том, что режим отключает отложенное выделение,
dioread_nolock,O_DIRECTиfast_commit; - отключает
dioread_nolock— dioread_nolockрежим прямого чтения без блокировки inode; - отключает
fast_commit— fast_commitмеханизм быстрой фиксации транзакций журнала; - отказывает в монтировании, если одновременно включены
EXPLICIT_DELALLOCилиDAX_ALWAYS; - при наличии шифрования выводит предупреждение, что шифрованные файлы будут использовать data=orderedрежим журналирования, при котором через журнал проходят только метаданные, а данные записываются напрямую;
- отключает отложенное выделение (
DELALLOC), если оно установлено.
Также при data=journal максимальный порядок фолио устанавливается равным минимальному.
Если режим не data=journal, функция устанавливает флаг SB_I_CGROUPWB в sb->s_iflags.
Как устроен режим журналирования данных
В режиме data=journal для inode устанавливается набор операций адресного пространства ext4_journalled_aopsнабор операций адресного пространства ext4 для режима журналирования данных: определяет, как страницы inode читаются, записываются и помечаются грязными, в котором write_end = ext4_journalled_write_end и dirty_folio = ext4_journalled_dirty_folio.
ext4_journalled_dirty_folio при попытке пометить страницу грязной не делает буферы грязными, а при наличии pin-а помечает folio как checked, после чего вызывается filemap_dirty_folio. ext4_journalled_write_end при частичной записи вызывает ext4_journalled_zero_new_buffers, который для новых буферов обнуляет диапазон и вызывает write_end_fn, а не помечает буферы грязными. Для уже записанных буферов ext4_journalled_write_end проходит по буферам через ext4_walk_page_buffers с write_end_fn, а затем обновляет i_datasync_tid.
ext4_journal_folio_buffers сначала получает доступ на запись к буферам через do_journal_get_write_access, затем вызывает write_end_fn, после чего добавляет inode в журнал через ext4_jbd2_inode_add_write и также обновляет i_datasync_tid.
Как выбирается режим для конкретного inode
Для каждого inode система определяет, как именно будут журналироваться его данные. Если журнал у файловой системы отсутствует, данные пишутся в режиме отложенной записи — writebackрежим, при котором метаданные журналируются, а сами данные записываются на диск без гарантии порядка относительно метаданных. Если inode не является обычным файлом, помечен флагом EXT4_INODE_EA_INODE, либо при монтировании выбрана опция DATA_FLAGS со значением EXT4_MOUNT_JOURNAL_DATA, либо у inode установлен флаг EXT4_INODE_JOURNAL_DATA и не включён DELALLOC — данные пишутся в режиме полного журналирования, journal dataрежим, при котором и метаданные, и сами данные сначала попадают в журнал, а уже потом на диск. Исключение — зашифрованный обычный файл: для него выбирается orderedрежим, при котором данные записываются на диск до фиксации метаданных в журнале. В остальных случаях режим определяется опцией монтирования: при DATA_FLAGS со значением EXT4_MOUNT_ORDERED_DATA используется ordered, при EXT4_MOUNT_WRITEBACK_DATA — writeback.
Как выбирается режим по умолчанию
При загрузке журнала ext4_load_and_init_journal, если режим данных не задан (test_opt(sb, DATA_FLAGS) == 0), выбирается ORDERED_DATA, если журнал поддерживает JBD2_FEATURE_INCOMPAT_REVOKE, иначе JOURNAL_DATA.
Функция ext4_has_journal_option возвращает строку с именем опции журнала, которая отличается от значения по умолчанию: она проверяет JOURNAL_ASYNC_COMMIT, EXPLICIT_JOURNAL_CHECKSUM, s_commit_interval, DATA_FLAGS и DATA_ERR_ABORT, возвращая соответствующее имя или NULL.
Ограничения совместимости
Режим data=journal несовместим с dioread_nolock — ядро не отклоняет монтирование, а молча отключает dioread_nolock. Дополнительно снимается JOURNAL_FAST_COMMIT и, если задан DELALLOC, снимается DELALLOC. При явном EXPLICIT_DELALLOC или DAX_ALWAYS монтирование отклоняется с -EINVAL.
Также data=ordered несовместим с journal_async_commit — монтирование с обоими опциями завершается ошибкой.
Альтернативные режимы
Вместо data=journal применяются режимы data=ordered и data=writeback, которые выбираются через опцию монтирования data и проверяются в ext4_inode_journal_mode. Для шифрованных обычных файлов при data=journal фактически используется ordered-режим.
Механизм jbd2 представлен fast commitускоренной фиксацией транзакций журнала: вместо полной фиксации jbd2 сохраняет только изменившиеся метаданные, что ускоряет завершение операций. Быстрая фиксация запускается, только если уже была хотя бы одна полная фиксация; при её запуске, завершении и откате к полной фиксации система переходит между ускоренным и обычным режимами фиксации журнала.
Что можно будет удалить после отказа от режима
После отказа от data=journal можно удалить или упростить несколько journalled-специфичных путей. В super.c функция ext4_journalled_submit_inode_data_buffers и её помощник ext4_journalled_writepage_needs_redirty существуют только для режима журналирования данных: они переотмечают грязные фолио при writeback. Функция ext4_journal_submit_inode_data_buffers выбирает между journalled- и normal-ветками через ext4_should_journal_data, а ext4_journal_finish_inode_data_buffers вызывает jbd2_journal_finish_inode_data_buffers только когда режим не journalled — обе можно свести к прямым вызовам.
В ext4_check_journal_data_mode вся ветка для EXT4_MOUNT_JOURNAL_DATA станет ненужной. В ext4_set_max_mapping_order выбор sbi->s_max_folio_order = sbi->s_min_folio_order делается только для EXT4_MOUNT_JOURNAL_DATA.
В inode.c можно удалить ext4_dirty_journalled_data, ext4_journalled_zero_new_buffers, ext4_journalled_write_end, ext4_journalled_dirty_folio и таблицу ext4_journalled_aops, а в ext4_set_aops — ветку EXT4_INODE_JOURNAL_DATA_MODE, назначающую ext4_journalled_aops. Также в ext4_block_write_begin проверки should_journal_data и вызовы do_journal_get_write_access/ext4_journalled_zero_new_buffers станут лишними.
Сроки и версии
Релиз-кандидат 7.3-rc7 опубликован 12 октября 2026 года. Финальный релиз запланирован на следующие выходные. Режим data=journal будет полностью удалён в начале 2028 года.
Ограничения и открытые вопросы
Авторы признают, что режим data=journal устарел и будет удалён. Этот режим отключает отложенное выделение, dioread_nolock, O_DIRECT и fast_commit, а также несовместим с delalloc и dax — монтирование с обоими опциями завершается ошибкой. Для шифрованных файлов data=journal не применяется — вместо него используется data=ordered.