В некоторых файловых системах при создании файла необходимо вызывать fsync() не только для самого файла, но и для родительского каталога, чтобы сделать создание файла долговременным. В противном случае запись каталога может быть потеряна из-за нечистого размонтирования; Индекс файла будет потерян.
Это все еще верно для ext4, или журнал об этом позаботится?
Многие приложения (например, vim, как проверено strace), похоже, вызывают fsync только для файла. Это безопасно?
Обновление: в коммите 14ece1028b3ed53ffec1b1213ffc6acaf79ad77c для ядра, ext4 специально изменяется так, что при отключенном ведении журнала запись родительского каталога автоматически fsync() редактируется при fsync() самого файла. Но как насчет включенного ведения журнала? Является ли каталог fsync() неявным, поскольку он является частью той же транзакции, что и создание нового inode?