Block patches for 5.1.0:
- Fix block I/O for split transfers - Fix iotest 197 for non-qcow2 formats -----BEGIN PGP SIGNATURE----- iQFGBAABCAAwFiEEkb62CjDbPohX0Rgp9AfbAGHVz0AFAl8gK/gSHG1yZWl0ekBy ZWRoYXQuY29tAAoJEPQH2wBh1c9AR+kIALv+Z/A6SPpsAHjpyuRbluuhznfqPuiX mIVX0qNhsFBDAUVw1tOkMtfxOIvuaQW/QWzM0UPaHqB/I4ckzE6Dp98ys9uwHPdq ez23blWvBuB3P3y2ZBAYhhRlCqt3w4uI/lIJMu7VZBghXxj3fGcuTnLlWx8gb1IH 74MiBX8XPt532FiFTnpzxgns8NYkZY8mF6zduGqBPx6bPmdNdDfqAhL68Fv8uKJA k4dVH6ffPLZD+RrCz9GL5rsYQ6NR6tfyEoRMPqtJznhtzWwu5h5EF3p46VkcKheI k0axygEBAr9JbeCwbIK3a4hjQ7eaFQ6j9JR+lPZBRaDbLHv/xGNNuvw= =C4Lq -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/maxreitz/tags/pull-block-2020-07-28' into staging Block patches for 5.1.0: - Fix block I/O for split transfers - Fix iotest 197 for non-qcow2 formats # gpg: Signature made Tue 28 Jul 2020 14:45:28 BST # gpg: using RSA key 91BEB60A30DB3E8857D11829F407DB0061D5CF40 # gpg: issuer "mreitz@redhat.com" # gpg: Good signature from "Max Reitz <mreitz@redhat.com>" [full] # Primary key fingerprint: 91BE B60A 30DB 3E88 57D1 1829 F407 DB00 61D5 CF40 * remotes/maxreitz/tags/pull-block-2020-07-28: iotests/197: Fix for non-qcow2 formats iotests/028: Add test for cross-base-EOF reads block: Fix bdrv_aligned_p*v() for qiov_offset != 0 Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
0c4fa5bc1a
10
block/io.c
10
block/io.c
|
@ -1524,12 +1524,13 @@ static int coroutine_fn bdrv_aligned_preadv(BdrvChild *child,
|
||||||
assert(num);
|
assert(num);
|
||||||
|
|
||||||
ret = bdrv_driver_preadv(bs, offset + bytes - bytes_remaining,
|
ret = bdrv_driver_preadv(bs, offset + bytes - bytes_remaining,
|
||||||
num, qiov, bytes - bytes_remaining, 0);
|
num, qiov,
|
||||||
|
qiov_offset + bytes - bytes_remaining, 0);
|
||||||
max_bytes -= num;
|
max_bytes -= num;
|
||||||
} else {
|
} else {
|
||||||
num = bytes_remaining;
|
num = bytes_remaining;
|
||||||
ret = qemu_iovec_memset(qiov, bytes - bytes_remaining, 0,
|
ret = qemu_iovec_memset(qiov, qiov_offset + bytes - bytes_remaining,
|
||||||
bytes_remaining);
|
0, bytes_remaining);
|
||||||
}
|
}
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto out;
|
goto out;
|
||||||
|
@ -2032,7 +2033,8 @@ static int coroutine_fn bdrv_aligned_pwritev(BdrvChild *child,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = bdrv_driver_pwritev(bs, offset + bytes - bytes_remaining,
|
ret = bdrv_driver_pwritev(bs, offset + bytes - bytes_remaining,
|
||||||
num, qiov, bytes - bytes_remaining,
|
num, qiov,
|
||||||
|
qiov_offset + bytes - bytes_remaining,
|
||||||
local_flags);
|
local_flags);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -142,6 +142,25 @@ TEST_IMG="${TEST_IMG}.copy" io_zero readv $(( offset + 32 * 1024 )) 512 1024 32
|
||||||
|
|
||||||
_check_test_img
|
_check_test_img
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo '=== Reading across backing EOF in one operation ==='
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Use a cluster boundary as the base end here
|
||||||
|
base_size=$((3 * 1024 * 1024 * 1024))
|
||||||
|
|
||||||
|
TEST_IMG="$TEST_IMG.base" _make_test_img $base_size
|
||||||
|
_make_test_img -b "$TEST_IMG.base" -F $IMGFMT $image_size
|
||||||
|
|
||||||
|
# Write 16 times 42 at the end of the base image
|
||||||
|
$QEMU_IO -c "write -P 42 $((base_size - 16)) 16" "$TEST_IMG.base" \
|
||||||
|
| _filter_qemu_io
|
||||||
|
|
||||||
|
# Read 32 bytes across the base EOF from the top;
|
||||||
|
# should be 16 times 0x2a, then 16 times 0x00
|
||||||
|
$QEMU_IO -c "read -v $((base_size - 16)) 32" "$TEST_IMG" \
|
||||||
|
| _filter_qemu_io
|
||||||
|
|
||||||
# success, all done
|
# success, all done
|
||||||
echo "*** done"
|
echo "*** done"
|
||||||
rm -f $seq.full
|
rm -f $seq.full
|
||||||
|
|
|
@ -730,4 +730,15 @@ read 512/512 bytes at offset 3221257728
|
||||||
read 512/512 bytes at offset 3221258752
|
read 512/512 bytes at offset 3221258752
|
||||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
No errors were found on the image.
|
No errors were found on the image.
|
||||||
|
|
||||||
|
=== Reading across backing EOF in one operation ===
|
||||||
|
|
||||||
|
Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=3221225472
|
||||||
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294968832 backing_file=TEST_DIR/t.IMGFMT.base backing_fmt=IMGFMT
|
||||||
|
wrote 16/16 bytes at offset 3221225456
|
||||||
|
16 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
|
bffffff0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a ................
|
||||||
|
c0000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
||||||
|
read 32/32 bytes at offset 3221225456
|
||||||
|
32 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
*** done
|
*** done
|
||||||
|
|
|
@ -114,9 +114,11 @@ echo
|
||||||
|
|
||||||
# Force compat=1.1, because writing zeroes on a v2 image without a
|
# Force compat=1.1, because writing zeroes on a v2 image without a
|
||||||
# backing file would just result in an unallocated cluster
|
# backing file would just result in an unallocated cluster
|
||||||
_make_test_img -o compat=1.1 1024
|
# (Also, note that this is really a pure qcow2 test.)
|
||||||
$QEMU_IO -f $IMGFMT -C -c 'read 0 1024' "$TEST_IMG" | _filter_qemu_io
|
IMGPROTO=file IMGFMT=qcow2 TEST_IMG_FILE="$TEST_WRAP" \
|
||||||
$QEMU_IO -f $IMGFMT -c map "$TEST_IMG"
|
_make_test_img --no-opts -o compat=1.1 1024
|
||||||
|
$QEMU_IO -f qcow2 -C -c 'read 0 1024' "$TEST_WRAP" | _filter_qemu_io
|
||||||
|
$QEMU_IO -f qcow2 -c map "$TEST_WRAP"
|
||||||
_check_test_img
|
_check_test_img
|
||||||
|
|
||||||
# success, all done
|
# success, all done
|
||||||
|
|
|
@ -26,7 +26,7 @@ Images are identical.
|
||||||
|
|
||||||
=== Partial final cluster ===
|
=== Partial final cluster ===
|
||||||
|
|
||||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1024
|
Formatting 'TEST_DIR/t.wrap.IMGFMT', fmt=IMGFMT size=1024
|
||||||
read 1024/1024 bytes at offset 0
|
read 1024/1024 bytes at offset 0
|
||||||
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||||
1 KiB (0x400) bytes allocated at offset 0 bytes (0x0)
|
1 KiB (0x400) bytes allocated at offset 0 bytes (0x0)
|
||||||
|
|
Loading…
Reference in a new issue