как o_sync запускает pdflush?

Когда я пишу с помощью o_sync , вызов записи возвращается после записи данных на диск. Но как o_sync заставляет Linux записывать данные на диск?

Обычно вам придется ждать максимум dirty_expire_centisecs +dirty_writeback_centisecs (30 секунд + 5 секунд) в худшем случае для pdflush для записи данных на диск.

o_sync устанавливает dirty_expire_centisecs для данных ниже или что-то другое происходит (вручную вызывает флеш)?

Укажите источники ответа. Я не мог найти что-либо по этой теме.

Как упоминал Санкальп, поток pdflush не связан с записью в файл с установленным флагом O_SYNC. Это происходит в контексте потоков. Чтобы получить точный путь кода, полученный ядром, вы можете использовать ftrace для отслеживания syscall. Я могу проверить то же самое и задокументировать здесь в своем блоге

Не обязательно, чтобы промывка происходила в контексте потока pdflush. В случае O_SYNC и вызова fsync промывка происходит в контексте потока, вызывающего системный вызов write / sync. Кодовый путь в случае o_sync выглядит примерно так:

__vfs_write -> (f_op-> write_iter) / generic_file_write_iter -> generic_write_sync -> (f_op-> fsync) -> filemap_write_and_wait_range -> do_writepages -> write_cache_pages -> (f_op-> writepage)