btrfs/149: make it sectorsize independent

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>
This commit is contained in:
Anand Jain
2018-09-16 18:52:08 +08:00
committed by Eryu Guan
parent 29b2f63b3e
commit cc8831f9a5
4 changed files with 46 additions and 23 deletions
+7
View 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}'
}
+5
View 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)
+30 -16
View File
@@ -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
+4 -7
View 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