Нужно ли нам fsync родительский каталог в UBIFS для атомных * и * долговременных обновлений файлов

Вот типичный и хорошо известный подход для атомарных обновлений файлов:

fd = open(“foo.new”, O_WRONLY);
write(fd, buf, bufsize);
fsync(fd);
close(fd);
rename(“foo.new”, “foo”);

В общем, если нам также нужна долговечность (то есть гарантия того, что новая версия файла будет доступна в случае сбоя), то нам также необходимо вызвать fsync в родительском каталоге.

Вопрос: это также необходимо для UBIFS? В документации сказано:

fsync () может быть вызван для каталогов - он синхронизирует метаданные inode каталогов. [...]

Вызов fdatasync() для каталогов в UBIFS "no-op", и все операции UBIFS, которые изменяют записи каталога, являются синхронными.

Если я правильно читаю, последнее ("все операции UBIFS, которые изменяют записи каталога синхронны"), по-видимому, подразумевает, что вызов fsync на родительском режиссере не было бы необходимости. Однако мои тесты, кажется, указывают на обратное. Я неправильно читаю документы или эта информация устарела?

1 ответ

Решение

Я спросил в списке рассылки MTD; кажется, что документация неоднозначна, и что вызов fsync на родительском dir необходимо как в других файловых системах.

Другие вопросы по тегам