Strange sync/fsync behavior in btrfs

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



Hi!

I am Arvind Raghavan, an undergraduate student at the Unversity
of Texas at Austin, working with Prof. Vijay Chidambaram. I've
been working on the Crashmonkey [1] project, which is a test
harness for file system crash consistency checks. Specifically,
we've been working on making a fuzzer to find new bugs, and we
discovered some weird behavior. Given the following workload:

mkdir A
mkdir B
mkdir A/C
creat B/foo
sync (1)
link B/foo A/C/foo
fsync A (2)
<crash>

Running on Linux 5.5.2, upon recovering the filesystem, the hard
linked file A/C/foo is not present. However, if we replace (1)
with "fsync B/foo", then upon recovery the link persists. This
behavior seems strange, as intuitively it seems that sync should
have at least as strong effect as fsync. In addition, it seems
that Chris Mason's definition of fsync guarantees here [2] might
require this workload to pass.

It is important to note that even if we skip the final fsync (2),
the result is the same. Thus, the behavior is coming only from
the syncing operation at line (1). However, we were also curious
to know whether an fsync of the directory A here (2) should
persist the file A/C/foo. Chris mentions [2] that an fsync
of a directory means that "all the files/subdirs will exist".
Should this apply to files created in subdirectories?


Thanks!
Arvind

[1] https://www.github.com/utsaslab/crashmonkey
[2] https://www.spinics.net/lists/linux-btrfs/msg77330.html



[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux