btrfs/149: make it sectorsize independent
authorAnand Jain <anand.jain@oracle.com>
Sun, 16 Sep 2018 10:52:08 +0000 (18:52 +0800)
committerEryu Guan <guaneryu@gmail.com>
Sun, 16 Sep 2018 11:56:08 +0000 (19:56 +0800)
Originally this test case was designed to work with 4K sectorsize.
Now enhance it to work with any sector sizes and makes the following
changes:
.out file not to contain any traces of sector size.
Use max_inline=0 mount option so that it meets the requisite of non inline
regular extent.
Don't log the md5sum results to the output file as the data size vary by
the sectorsize.

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
common/btrfs
common/filter
tests/btrfs/149
tests/btrfs/149.out

index 79c687f73376e06784e5d972edc1abe3e1f0e2db..26dc0bb9600f37b50a1039c26e492c989da163ea 100644 (file)
@@ -367,3 +367,10 @@ _run_btrfs_balance_start()
 
        run_check $BTRFS_UTIL_PROG balance start $bal_opt $*
 }
+
+#return the sector size of the btrfs scratch fs
+_scratch_btrfs_sectorsize()
+{
+       $BTRFS_UTIL_PROG inspect-internal dump-super $SCRATCH_DEV |\
+               grep sectorsize | awk '{print $2}'
+}
index 3965c2eb752bb8278b610c001b186a97edfc9b75..e87740ddda3f407ba8b8fbb3ad83646ba9545cad 100644 (file)
@@ -271,6 +271,11 @@ _filter_xfs_io_pages_modified()
        _filter_xfs_io_units_modified "Page" $PAGE_SIZE
 }
 
+_filter_xfs_io_numbers()
+{
+        _filter_xfs_io | sed -E 's/[0-9]+/XXXX/g'
+}
+
 _filter_test_dir()
 {
        # TEST_DEV may be a prefix of TEST_DIR (e.g. /mnt, /mnt/ovl-mnt)
index 3e955a305e0f399a10f49d549b966422e6f6c125..bf5e16962876a81b16481a2457b47e33e6094b03 100755 (executable)
@@ -6,7 +6,7 @@
 #
 # Test that an incremental send/receive operation will not fail when the
 # destination filesystem has compression enabled and the source filesystem
-# has a 4K extent at a file offset 0 that is not compressed and that is
+# has an extent at a file offset 0 that is not compressed and that is
 # shared.
 #
 seq=`basename $0`
@@ -36,6 +36,7 @@ _require_test
 _require_scratch
 _require_scratch_reflink
 _require_odirect
+_require_btrfs_command inspect-internal dump-super
 
 send_files_dir=$TEST_DIR/btrfs-test-$seq
 
@@ -44,21 +45,27 @@ rm -fr $send_files_dir
 mkdir $send_files_dir
 
 _scratch_mkfs >>$seqres.full 2>&1
-_scratch_mount "-o compress"
+# On 64K pagesize systems the compression is more efficient, so max_inline
+# helps to create regular (non inline) extent irrespective of the final
+# write size.
+_scratch_mount "-o compress -o max_inline=0"
 
 # Write to our file using direct IO, so that this way the write ends up not
 # getting compressed, that is, we get a regular extent which is neither
 # inlined nor compressed.
 # Alternatively, we could have mounted the fs without compression enabled,
 # which would result as well in an uncompressed regular extent.
-$XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 4K" $SCRATCH_MNT/foobar | _filter_xfs_io
+sectorsize=$(_scratch_btrfs_sectorsize)
+$XFS_IO_PROG -f -d -c "pwrite -S 0xab 0 $sectorsize" $SCRATCH_MNT/foobar |\
+       _filter_xfs_io_numbers
 
 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \
        $SCRATCH_MNT/mysnap1 > /dev/null
 
 # Clone the regular (not inlined) extent.
-$XFS_IO_PROG -c "reflink $SCRATCH_MNT/foobar 0 8K 4K" $SCRATCH_MNT/foobar \
-       | _filter_xfs_io
+$XFS_IO_PROG -c \
+       "reflink $SCRATCH_MNT/foobar 0 $((2 * $sectorsize)) $sectorsize" \
+       $SCRATCH_MNT/foobar | _filter_xfs_io_numbers
 
 $BTRFS_UTIL_PROG subvolume snapshot -r $SCRATCH_MNT \
        $SCRATCH_MNT/mysnap2 > /dev/null
@@ -67,17 +74,19 @@ $BTRFS_UTIL_PROG send -f $send_files_dir/1.snap \
                 $SCRATCH_MNT/mysnap1 2>&1 >/dev/null | _filter_scratch
 
 # Now do an incremental send of the second snapshot. The send stream can have
-# a clone operation to clone the extent at offset 0 to offset 8K. This operation
-# would fail on the receiver if it has compression enabled, since the write
-# operation of the extent at offset 0 was compressed because it was a buffered
-# write operation, and btrfs' clone implementation does not allow cloning inline
-# extents to offsets different from 0.
+# a clone operation to clone the extent at offset 0 to offset (2 x sectorsize).
+# This operation would fail on the receiver if it has compression enabled, since
+# the write operation of the extent at offset 0 was compressed because it was a
+# buffered write operation, and btrfs' clone implementation does not allow
+# cloning inline extents to offsets different from 0.
 $BTRFS_UTIL_PROG send -p $SCRATCH_MNT/mysnap1 -f $send_files_dir/2.snap \
                 $SCRATCH_MNT/mysnap2 2>&1 >/dev/null | _filter_scratch
 
-echo "File digests in the original filesystem:"
-md5sum $SCRATCH_MNT/mysnap1/foobar | _filter_scratch
-md5sum $SCRATCH_MNT/mysnap2/foobar | _filter_scratch
+sum_src_snap1=$(md5sum $SCRATCH_MNT/mysnap1/foobar | awk '{print $1}')
+sum_src_snap2=$(md5sum $SCRATCH_MNT/mysnap2/foobar | awk '{print $1}')
+echo "File digests in the original filesystem:" >> $seqres.full
+echo "md5sum $SCRATCH_MNT/mysnap1/foobar " $sum_src_snap1 >> $seqres.full
+echo "md5sum $SCRATCH_MNT/mysnap2/foobar " $sum_src_snap2 >> $seqres.full
 
 # Now recreate the filesystem by receiving both send streams and verify we get
 # the same file content that the original filesystem had.
@@ -88,9 +97,14 @@ _scratch_mount "-o compress"
 $BTRFS_UTIL_PROG receive -f $send_files_dir/1.snap $SCRATCH_MNT > /dev/null
 $BTRFS_UTIL_PROG receive -f $send_files_dir/2.snap $SCRATCH_MNT > /dev/null
 
-echo "File digests in the new filesystem:"
-md5sum $SCRATCH_MNT/mysnap1/foobar | _filter_scratch
-md5sum $SCRATCH_MNT/mysnap2/foobar | _filter_scratch
+sum_dest_snap1=$(md5sum $SCRATCH_MNT/mysnap1/foobar | awk '{print $1}')
+sum_dest_snap2=$(md5sum $SCRATCH_MNT/mysnap2/foobar | awk '{print $1}')
+echo "File digests in the new filesystem:" | tee -a $seqres.full
+echo "md5sum $SCRATCH_MNT/mysnap1/foobar " $sum_src_snap1 >> $seqres.full
+echo "md5sum $SCRATCH_MNT/mysnap2/foobar " $sum_src_snap2 >> $seqres.full
+
+[[ $sum_src_snap1 == $sum_dest_snap1 ]] && echo "src and dest 'mysnap1' checksum matched"
+[[ $sum_src_snap2 == $sum_dest_snap2 ]] && echo "src and dest 'mysnap2' checksum matched"
 
 status=0
 exit
index 303de928d35af23331dee23a1c8a1420c4fb5b32..13bcd5c99733937c2da9ee3098b4624f0292fdb5 100644 (file)
@@ -1,14 +1,11 @@
 QA output created by 149
-wrote 4096/4096 bytes at offset 0
+wrote XXXX/XXXX bytes at offset XXXX
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
-linked 4096/4096 bytes at offset 8192
+linked XXXX/XXXX bytes at offset XXXX
 XXX Bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
 At subvol SCRATCH_MNT/mysnap1
 At subvol SCRATCH_MNT/mysnap2
-File digests in the original filesystem:
-1696b8fe138e867797eb6683cf13d99c  SCRATCH_MNT/mysnap1/foobar
-28feb14349a6f6c67a11967278ed7359  SCRATCH_MNT/mysnap2/foobar
 At subvol mysnap1
 File digests in the new filesystem:
-1696b8fe138e867797eb6683cf13d99c  SCRATCH_MNT/mysnap1/foobar
-28feb14349a6f6c67a11967278ed7359  SCRATCH_MNT/mysnap2/foobar
+src and dest 'mysnap1' checksum matched
+src and dest 'mysnap2' checksum matched