On Wed, May 15, 2019 at 04:02:47PM +0100, [email protected] wrote: > From: Filipe Manana <[email protected]> > > When replaying a log that contains a new file or directory name that needs > to be added to its parent directory, we end up updating the mtime and the > ctime of the parent directory to the current time after we have set their > values to the correct ones (set at fsync time), efectivelly losing them. > > Sample reproducer: > > $ mkfs.btrfs -f /dev/sdb > $ mount /dev/sdb /mnt > > $ mkdir /mnt/dir > $ touch /mnt/dir/file > > # fsync of the directory is optional, not needed > $ xfs_io -c fsync /mnt/dir > $ xfs_io -c fsync /mnt/dir/file > > $ stat -c %Y /mnt/dir > 1557856079 > > <power failure> > > $ sleep 3 > $ mount /dev/sdb /mnt > $ stat -c %Y /mnt/dir > 1557856082 > > --> should have been 1557856079, the mtime is updated to the current > time when replaying the log > > Fix this by not updating the mtime and ctime to the current time at > btrfs_add_link() when we are replaying a log tree. > > This could be triggered by my recent fsync fuzz tester for fstests, for > which an fstests patch exists titled "fstests: generic, fsync fuzz tester > with fsstress". > > Fixes: e02119d5a7b43 ("Btrfs: Add a write ahead tree log to optimize > synchronous operations") > Signed-off-by: Filipe Manana <[email protected]>
Added to 5.2-rc queue, thanks.
