generic/517: make test work on filesystems with block size greater than 4Kb
authorFilipe Manana <fdmanana@suse.com>
Tue, 13 Aug 2019 16:22:55 +0000 (17:22 +0100)
committerEryu Guan <guaneryu@gmail.com>
Sun, 18 Aug 2019 14:39:01 +0000 (22:39 +0800)
The test currently fails on filesystems with a block size greater
than 4Kb, as dedupe operations fail with -EINVAL because the file
offsets used are not multiples of such block sizes (but they are
multiples of 4Kb, 2Kb and 1Kb).

So update the test to use offsets that are multiples of 64Kb, since
that allows the test to work on filesystems with any block size
between 4Kb and 64Kb (8Kb, 16Kb, 32Kb). Verified it works as
expected on kernels that have the fixes for the issue tested by this
test case (listed in the changelog of commit
91540ef980110f78161893f98d946e2afa0c1f4a), and on systems without
those fixes (a 4.18 kernel), it fails as it is supposed to.

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/generic/517
tests/generic/517.out

index 601bb24e177b69261fb093e6da06f1fac339862e..67aec8e6a624b2b9406e73e9c2959fad5e58f6da 100755 (executable)
@@ -36,28 +36,29 @@ rm -f $seqres.full
 _scratch_mkfs >>$seqres.full 2>&1
 _scratch_mount
 
-# The first byte with a value of 0xae starts at an offset (2518890) which is not
-# a multiple of the block size.
+# The first byte with a value of 0xae starts at an offset (512Kb + 100) which is
+# not a multiple of the block size.
 $XFS_IO_PROG -f \
-       -c "pwrite -S 0x6b 0 2518890" \
-       -c "pwrite -S 0xae 2518890 102398" \
+       -c "pwrite -S 0x6b 0 524388" \
+       -c "pwrite -S 0xae 524388 256K" \
        $SCRATCH_MNT/foo | _filter_xfs_io
 
-# Create a second file with a length not aligned to the block size, whose bytes
-# all have the value 0x6b, so that its extent(s) can be deduplicated with the
-# first file.
-$XFS_IO_PROG -f -c "pwrite -S 0x6b 0 557771" $SCRATCH_MNT/bar | _filter_xfs_io
+# Create a second file with a length not aligned to the block size (128K + 100),
+# whose bytes all have the value 0x6b, so that its extent(s) can be deduplicated
+# with the first file.
+$XFS_IO_PROG -f -c "pwrite -S 0x6b 0 131172" $SCRATCH_MNT/bar | _filter_xfs_io
 
 # The file is filled with bytes having the value 0x6b from offset 0 to offset
-# 2518889 and with the value 0xae from offset 2518890 to offset 2621287.
+# 524388 (512K + 100) and with the value 0xae from offset 524388 to offset
+# 786532 (512K + 100 + 256K).
 echo "File content before first deduplication:"
-od -t x1 $SCRATCH_MNT/foo
+od -A d -t x1 $SCRATCH_MNT/foo
 
 # Now deduplicate the entire second file into a range of the first file that
 # also has all bytes with the value 0x6b. The destination range's end offset
 # must not be aligned to the block size and must be less then the offset of
-# the first byte with the value 0xae (byte at offset 2518890).
-$XFS_IO_PROG -c "dedupe $SCRATCH_MNT/bar 0 1957888 557771" $SCRATCH_MNT/foo \
+# the first byte with the value 0xae (byte at offset 524388).
+$XFS_IO_PROG -c "dedupe $SCRATCH_MNT/bar 0 64K 131172" $SCRATCH_MNT/foo \
        | _filter_xfs_io
 
 # We should have exactly the same data we had before we asked for deduplication.
@@ -81,8 +82,9 @@ $XFS_IO_PROG -f -c "pwrite -S 0xae 0 100" $SCRATCH_MNT/baz | _filter_xfs_io
 # before.
 _scratch_cycle_mount
 
-# Now attempt to dedupe the single block of baz into foo.
-$XFS_IO_PROG -c "dedupe $SCRATCH_MNT/baz 0 2519040 100" $SCRATCH_MNT/foo \
+# Now attempt to dedupe the single block of baz into foo. The destination range,
+# in file foo, has all bytes with the same value (0xae) as file baz.
+$XFS_IO_PROG -c "dedupe $SCRATCH_MNT/baz 0 640K 100" $SCRATCH_MNT/foo \
     | _filter_xfs_io
 
 # Now attempt to unmount the filesystem before reading from the file. This is
index 137a9719330b44641c27a8749b23d5ad4296b920..b9b63207cba8f4e838365caf04ea1c4a5861e89d 100644 (file)
@@ -1,45 +1,45 @@
 QA output created by 517
-wrote 2518890/2518890 bytes at offset 0
+wrote 524388/524388 bytes at offset 0
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-wrote 102398/102398 bytes at offset 2518890
+wrote 262144/262144 bytes at offset 524388
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-wrote 557771/557771 bytes at offset 0
+wrote 131172/131172 bytes at offset 0
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 File content before first deduplication:
 0000000 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
 *
-11467540 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b ae ae ae ae ae ae
-11467560 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
+0524384 6b 6b 6b 6b ae ae ae ae ae ae ae ae ae ae ae ae
+0524400 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
 *
-11777540 ae ae ae ae ae ae ae ae
-11777550
-deduped 557771/557771 bytes at offset 1957888
+0786528 ae ae ae ae
+0786532
+deduped 131172/131172 bytes at offset 65536
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 File content after first deduplication and before unmounting:
 0000000 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
 *
-2518880 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b ae ae ae ae ae ae
-2518896 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
+0524384 6b 6b 6b 6b ae ae ae ae ae ae ae ae ae ae ae ae
+0524400 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
 *
-2621280 ae ae ae ae ae ae ae ae
-2621288
+0786528 ae ae ae ae
+0786532
 File content after first unmount:
 0000000 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
 *
-2518880 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b ae ae ae ae ae ae
-2518896 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
+0524384 6b 6b 6b 6b ae ae ae ae ae ae ae ae ae ae ae ae
+0524400 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
 *
-2621280 ae ae ae ae ae ae ae ae
-2621288
+0786528 ae ae ae ae
+0786532
 wrote 100/100 bytes at offset 0
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-deduped 100/100 bytes at offset 2519040
+deduped 100/100 bytes at offset 655360
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 File content after second deduplication:
 0000000 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b
 *
-2518880 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b ae ae ae ae ae ae
-2518896 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
+0524384 6b 6b 6b 6b ae ae ae ae ae ae ae ae ae ae ae ae
+0524400 ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae ae
 *
-2621280 ae ae ae ae ae ae ae ae
-2621288
+0786528 ae ae ae ae
+0786532