我们是否需要 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 与其他文件系统一样。
这是 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 与其他文件系统一样。