mirror of
https://github.com/linux-apfs/apfstests.git
synced 2026-05-01 15:01:44 -07:00
btrfs: check that cloning an inline extent does not lead to data loss
We have a bug in the current kernel merge window (for 5.7) that results
in data loss when cloning an inline extent into a new file (or an empty
file. This change adds a test for such case into the existing test case
btrfs/205, because it's the test case that tests all the supported
scenarios for cloning inline extents in btrfs.
Linux kernel commit 4fdb688c7071 ("btrfs: fix lost i_size update
after cloning inline extent") fixes the regression.
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
@@ -128,6 +128,18 @@ run_tests()
|
||||
|
||||
echo "File bar6 digest = $(_md5_checksum $SCRATCH_MNT/bar6)"
|
||||
|
||||
# File foo3 a single inline extent of 500 bytes.
|
||||
echo "Creating file foo3"
|
||||
$XFS_IO_PROG -f -c "pwrite -S 0xbf 0 500" $SCRATCH_MNT/foo3 | _filter_xfs_io
|
||||
|
||||
# File bar7 is an empty file, has no extents.
|
||||
touch $SCRATCH_MNT/bar7
|
||||
|
||||
echo "Cloning foo3 into bar7"
|
||||
$XFS_IO_PROG -c "reflink $SCRATCH_MNT/foo3" $SCRATCH_MNT/bar7 | _filter_xfs_io
|
||||
|
||||
echo "File bar7 digest = $(_md5_checksum $SCRATCH_MNT/bar7)"
|
||||
|
||||
# Unmount and mount again the filesystem. We want to verify the reflink
|
||||
# operations were durably persisted.
|
||||
_scratch_cycle_mount
|
||||
@@ -139,6 +151,7 @@ run_tests()
|
||||
echo "File bar4 digest = $(_md5_checksum $SCRATCH_MNT/bar4)"
|
||||
echo "File bar5 digest = $(_md5_checksum $SCRATCH_MNT/bar5)"
|
||||
echo "File bar6 digest = $(_md5_checksum $SCRATCH_MNT/bar6)"
|
||||
echo "File bar7 digest = $(_md5_checksum $SCRATCH_MNT/bar7)"
|
||||
}
|
||||
|
||||
_scratch_mkfs "-O ^no-holes" >>$seqres.full 2>&1
|
||||
|
||||
@@ -52,6 +52,13 @@ Cloning foo1 into bar6
|
||||
linked 131072/131072 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
Creating file foo3
|
||||
wrote 500/500 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Cloning foo3 into bar7
|
||||
linked 0/0 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
File digests after mounting again the filesystem:
|
||||
File bar1 digest = e9d03fb5fff30baf3c709f2384dfde67
|
||||
File bar2 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
@@ -59,6 +66,7 @@ File bar3 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
File bar4 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar5 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
|
||||
Testing with -o compress
|
||||
|
||||
@@ -112,6 +120,13 @@ Cloning foo1 into bar6
|
||||
linked 131072/131072 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
Creating file foo3
|
||||
wrote 500/500 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Cloning foo3 into bar7
|
||||
linked 0/0 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
File digests after mounting again the filesystem:
|
||||
File bar1 digest = e9d03fb5fff30baf3c709f2384dfde67
|
||||
File bar2 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
@@ -119,6 +134,7 @@ File bar3 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
File bar4 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar5 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
|
||||
Testing with -o nodatacow
|
||||
|
||||
@@ -172,6 +188,13 @@ Cloning foo1 into bar6
|
||||
linked 131072/131072 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
Creating file foo3
|
||||
wrote 500/500 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Cloning foo3 into bar7
|
||||
linked 0/0 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
File digests after mounting again the filesystem:
|
||||
File bar1 digest = e9d03fb5fff30baf3c709f2384dfde67
|
||||
File bar2 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
@@ -179,6 +202,7 @@ File bar3 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
File bar4 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar5 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
|
||||
Testing with -O no-holes
|
||||
|
||||
@@ -232,6 +256,13 @@ Cloning foo1 into bar6
|
||||
linked 131072/131072 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
Creating file foo3
|
||||
wrote 500/500 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
Cloning foo3 into bar7
|
||||
linked 0/0 bytes at offset 0
|
||||
XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
File digests after mounting again the filesystem:
|
||||
File bar1 digest = e9d03fb5fff30baf3c709f2384dfde67
|
||||
File bar2 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
@@ -239,3 +270,4 @@ File bar3 digest = 85678cf32ed48f92ca42ad06d0b63f2a
|
||||
File bar4 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar5 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar6 digest = 4b48829714d20a4e73a0cf1565270076
|
||||
File bar7 digest = 67679afda6f846539ca7138452de0171
|
||||
|
||||
Reference in New Issue
Block a user