这是typical and well-known approach的 atomic 文件更新:
fd = open(“foo.new”, O_WRONLY);
write(fd, buf, bufsize);
fsync(fd);
close(fd);
rename(“foo.new”, “foo”);
通常,如果我们还想要 durability (即保证在发生崩溃时文件的新版本可用),那么我们还需要在父目录上调用 fsync
.
问题:UBIFS还需要这个吗? documentation说:
可以为目录调用fsync() - 它同步目录inode元数据 . [...]对UBIFS中的目录的fdatasync()调用是“no-op”,所有更改目录条目的UBIFS操作都是同步的 .
如果我正确阅读,后者("all UBIFS operations which change directory entries are synchronous")似乎暗示在父目录上调用 fsync
是没有必要的 . 但是我的测试似乎表明不是这样 . 我误读了文档,还是这些信息过时了?
1 回答
我在MTD邮件列表上问过;似乎文档是模糊的,并且calling fsync on the parent dir is necessary与其他文件系统一样 .