On 17.11.2016 21:14, Eric Blake wrote: > Use blkdebug's new geometry constraints to emulate setups that > have caused recent regression fixes: write zeroes asserting > when running through a loopback block device with max-transfer > smaller than cluster size, and discard rounding away requests > that were not aligned to power-of-two boundaries. Also, add > coverage that the block layer is honoring max transfer limits. > > For now, a single iotest performs all actions, with the idea > that we can add future blkdebug constraint test cases in the > same file; but it can be split into multiple iotests if we find > reason to run one portion of the test in more setups than what > are possible in the other. > > Signed-off-by: Eric Blake <[email protected]> > --- > tests/qemu-iotests/173 | 115 > +++++++++++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/173.out | 49 +++++++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 165 insertions(+) > create mode 100755 tests/qemu-iotests/173 > create mode 100644 tests/qemu-iotests/173.out > > diff --git a/tests/qemu-iotests/173 b/tests/qemu-iotests/173 > new file mode 100755 > index 0000000..1215759 > --- /dev/null > +++ b/tests/qemu-iotests/173
[...]
> +echo
> +echo "== write zero with constrained max-transfer =="
> +limits=max-transfer=64k,opt-write-zero=$CLUSTER_SIZE
> +$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
> + -c "write -z 8003584 2093056" | _filter_qemu_io
> +
> +# Dell Equallogic iSCSI device is unusual with its 15M page size
Very minor nagging: A simple "Test non-power-of-two write-zero/discard
alignment" might get the point across better.
> +echo
> +echo "== non-power-of-2 write zeroes =="
> +
> +limits=opt-write-zero=15M,max-write-zero=15M,opt-discard=15M,max-discard=15M
> +$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
> + -c "write -z 32M 32M" | _filter_qemu_io
> +
> +echo
> +echo "== non-power-of-2 discard =="
> +
> +limits=opt-write-zero=15M,max-write-zero=15M,opt-discard=15M,max-discard=15M
> +$QEMU_IO -c "open -o $options,$limits blkdebug::$TEST_IMG" \
> + -c "discard 80000000 30M" | _filter_qemu_io
> +
> +echo
> +echo "== verify image content =="
> +
> +function verify_io()
> +{
> + if ($QEMU_IMG info -f "$IMGFMT" "$TEST_IMG" |
> + grep "compat: 0.10" > /dev/null); then
> + # For v2 images, discarded clusters are read from the backing file
> + discarded=11
> + else
> + # Discarded clusters are zeroed for v3 or later
> + discarded=0
> + fi
This is fine since you've already done the work to support compat=0.10,
but I think we've had v3 long enough that you could have just put
compat=0.10 into _unsupported_imgopts.
Reviewed-by: Max Reitz <[email protected]>
> +
> + echo read -P 22 0 1000
> + echo read -P 33 1000 128k
> + echo read -P 22 132072 7871512
> + echo read -P 0 8003584 2093056
> + echo read -P 22 10096640 23457792
> + echo read -P 0 32M 32M
> + echo read -P 22 64M 13M
> + echo read -P $discarded 77M 29M
> + echo read -P 22 106M 22M
> +}
> +
> +verify_io | $QEMU_IO "$TEST_IMG" | _filter_qemu_io
> +
> +_check_test_img
> +
> +# success, all done
> +echo "*** done"
> +status=0
signature.asc
Description: OpenPGP digital signature
