Мне нужно что-то типа барьеров ФС, но для файла. Причём непосредственная запись в файл прямо сейчас не обязательна, даже наоборот, лучше чтоб её не было.
То есть мне нужно, чтобы блоки, которые я отправил на запись до вызова barrier() гарантировано записались на диск до того как начнут записываться данные, которые я отправил на запись позже.
Картинка для пояснения:
1 2 3 4 | 5 6 7 | 8 9 10 | 11 12 13 14 15 16 17 | 18 19 20
Что мне нужно — это чтобы при сбрасывании кеша не было такого, что 9 записалось до 7, например. Последовательность записи внутри группы не имеет значения, пусть записывает как хочет.
Сейчас использую fsync, но он блокируется, пока не запишет данные, а это жуть как медленно. Есть sync_file_range, но как я понял, фактически он тоже ждёт.