我们是否需要 fsync UBIFS 中的父目录以进行原子 * 和 * 持久文件更新

Do we need to fsync the parent directory in UBIFS for atomic *and* durable file updates

这是 atomic 文件更新的 typical and well-known approach

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

一般来说,如果我们还想要持久性(即保证文件的版本可用,如果有的话崩溃),那么我们还需要在父目录上调用 fsync

问:UBIFS也需要这个吗? documentation 表示:

fsync() may be called for directories - it synchronizes the directory inode meta-data. [...]

The fdatasync() call for directories is "no-op" in UBIFS and all UBIFS operations which change directory entries are synchronous.

如果我没看错的话,后者 ("all UBIFS operations which change directory entries are synchronous") 似乎暗示在父目录上调用 fsync 是不必要的。然而,我的测试似乎表明并非如此。我是否误读了文档,或者此信息是否已过时?

我在 MTD 邮件列表上询问过;似乎文档含糊不清,并且 calling fsync on the parent dir is necessary 与其他文件系统一样。