linux-xfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [QUESTION] multiple fsync() vs single sync()
@ 2018-10-16 10:22 Romain Le Disez
  2018-10-16 12:57 ` Carlos Maiolino
  2018-10-17  1:16 ` Dave Chinner
  0 siblings, 2 replies; 8+ messages in thread
From: Romain Le Disez @ 2018-10-16 10:22 UTC (permalink / raw)
  To: linux-xfs@vger.kernel.org

Hi all,

In this pseudo-code (extracted from OpenStack Swift [1]):
    fd=open("/tmp/tempfile", O_CREAT | O_WRONLY);
    write(fd, ...);
    fsetxattr(fd, ...);
    fsync(fd);
    rename("/tmp/tempfile", "/data/foobar");
    dirfd = open("/data", O_DIRECTORY | O_RDONLY);
    fsync(dirfd);

OR (the same without temporary file):
    fd=open("/data", O_TMPFILE | O_WRONLY);
    write(fd, ...);
    fsetxattr(fd, ...);
    fsync(fd);
    linkat(AT_FDCWD, "/proc/self/fd/" + fd, AT_FDCWD, "/data/foobar", AT_SYMLINK_FOLLOW);
    dirfd = open("/data", O_DIRECTORY | O_RDONLY);
    fsync(dirfd);


I’m guaranteed that, what ever happen, I’ll have a complete file (data+xattr) or no file at all in the directory /data.

First question: is that a correct assumption or is there any loopholes?

Second question, if I replace the two fsync() by one sync(), do I get the same guarantee?
    fd=open("/data", O_TMPFILE | O_WRONLY);
    write(fd, ...);
    fsetxattr(fd, ...);
    linkat(AT_FDCWD, « /proc/self/fd/" + fd, AT_FDCWD, "/data/foobar", AT_SYMLINK_FOLLOW);
    sync();

From what I understand of the FAQ [1], write_barrier guarantee that journal (aka log) will be written before the inode (aka metadata). Did I miss something?

Many thanks for your help.

[1] https://github.com/openstack/swift/blob/2.19.0/swift/obj/diskfile.py#L1674-L1694
[2] http://xfs.org/index.php/XFS_FAQ#Q:_What_is_the_problem_with_the_write_cache_on_journaled_filesystems.3F

-- 
Romain


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-10-19 20:18 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-10-16 10:22 [QUESTION] multiple fsync() vs single sync() Romain Le Disez
2018-10-16 12:57 ` Carlos Maiolino
2018-10-16 13:53   ` Stefan Ring
2018-10-16 14:09     ` Romain Le Disez
2018-10-18 11:43       ` Carlos Maiolino
2018-10-17  1:16 ` Dave Chinner
2018-10-19  8:16   ` Romain Le Disez
2018-10-19 12:12     ` Dave Chinner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).