On Thu, Mar 11, 2021 at 6:05 PM Martin Raiber <mar...@urbackup.org> wrote: > > On 11.03.2021 15:43 Filipe Manana wrote: > > On Wed, Mar 10, 2021 at 5:18 PM Martin Raiber <mar...@urbackup.org> wrote: > >> Hi, > >> > >> I have this in a btrfs directory. Linux kernel 5.10.16, no errors in > >> dmesg, no scrub errors: > >> > >> ls -lh > >> total 19G > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> -rwxr-x--- 1 root root 783 Mar 10 14:56 disk_config.dat > >> ... > >> > >> disk_config.dat gets written to using fsync rename ( write new version to > >> disk_config.dat.new, fsync disk_config.dat.new, then rename to > >> disk_config.dat -- it is missing the parent directory fsync). > > That's interesting. > > > > I've just tried something like the following on 5.10.15 (and 5.12-rc2): > > > > create disk_config.dat > > sync > > for ((i = 0; i < 10; i++)); do > > create disk_config.dat.new > > write to disk_config.dat.new > > fsync disk_config.dat.new > > mv -f disk_config.dat.new disk_config.dat > > done > > <power fail> > > mount fs > > list directory > > > > I only get one file with the name disk_config.dat and one file with > > the name disk_config.dat.new. > > File disk_config.dat has the data written at iteration 9 and > > disk_config.dat.new has the data written at iteration 10 (expected). > > > > You haven't mentioned, but I suppose you had a power failure / unclean > > shutdown somewhere after an fsync, right? > > Is this something you can reproduce at will? > > I think I rebooted via "echo b > /proc/sysrq-trigger". But at that point it > probably didn't write to disk_config.dat anymore (for more than the commit > interval). I'm also not sure about the delay of me noticing those multiple > files (since it doesn't cause any problems) -- can't reproduce. > > This is the same machine and file system with ENOSPC in > btrfs_async_reclaim_metadata_space -> flush_space -> btrfs_run_delayed_refs. > Could be that something went wrong with the error handling/remount-ro w.r.t. > to the tree log?
It could be a bug between aborting a transaction (the error handling/remount ro) and an fsync in progress yes. I'll have to look at that and see if it's possible. Thanks for the report. > > > > >> So far no negative consequences... (except that programs might get > >> confused). > >> > >> echo 3 > /proc/sys/vm/drop_caches doesn't help. > >> > >> Regards, > >> Martin Raiber > > -- Filipe David Manana, “Whether you think you can, or you think you can't — you're right.”