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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 11 декабря 2018

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

...