b0ddcbbb36
If the virtual disk size isn't aligned to full clusters, bdrv_co_do_copy_on_readv() may get pnum == 0 before having the full cluster completed, which will let it run into an assertion failure: qemu-io: block/io.c:1203: bdrv_co_do_copy_on_readv: Assertion `skip_bytes < pnum' failed. Check for EOF, assert that we read at least as much as the read request originally wanted to have (which is true at EOF because otherwise bdrv_check_byte_request() would already have returned an error) and return success early even though we couldn't copy the full cluster. Signed-off-by: Kevin Wolf <kwolf@redhat.com>
35 lines
1.5 KiB
Plaintext
35 lines
1.5 KiB
Plaintext
QA output created by 197
|
|
|
|
=== Copy-on-read ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4294967296
|
|
wrote 1024/1024 bytes at offset 3221225472
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
Formatting 'TEST_DIR/t.wrap.IMGFMT', fmt=IMGFMT size=4294967296 backing_file=TEST_DIR/t.IMGFMT backing_fmt=IMGFMT
|
|
wrote 65536/65536 bytes at offset 1048576
|
|
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 131072/131072 bytes at offset 1048576
|
|
128 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 0/0 bytes at offset 0
|
|
0 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 2147483136/2147483136 bytes at offset 1024
|
|
2 GiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
read 1024/1024 bytes at offset 3221226496
|
|
1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
can't open device TEST_DIR/t.wrap.qcow2: Can't use copy-on-read on read-only device
|
|
2 GiB (0x80010000) bytes allocated at offset 0 bytes (0x0)
|
|
1023.938 MiB (0x3fff0000) bytes not allocated at offset 2 GiB (0x80010000)
|
|
64 KiB (0x10000) bytes allocated at offset 3 GiB (0xc0000000)
|
|
1023.938 MiB (0x3fff0000) bytes not allocated at offset 3 GiB (0xc0010000)
|
|
No errors were found on the image.
|
|
Images are identical.
|
|
|
|
=== Partial final cluster ===
|
|
|
|
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1024
|
|
read 1024/1024 bytes at offset 0
|
|
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)
|
|
No errors were found on the image.
|
|
*** done
|