mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 03:59:52 +00:00
iotests: Test corruption during COW request
Extend test file 060 by a test case for corruption occuring concurrently to a COW request. QEMU should not crash but rather return an appropriate error message. Signed-off-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
938789ea92
commit
98d39e34fe
@ -138,6 +138,32 @@ $QEMU_IMG snapshot -a foo "$TEST_IMG"
|
||||
_check_test_img
|
||||
$QEMU_IO -c "$OPEN_RO" -c "read -P 1 0 512" | _filter_qemu_io
|
||||
|
||||
echo
|
||||
echo "=== Testing overlap while COW is in flight ==="
|
||||
echo
|
||||
# compat=0.10 is required in order to make the following discard actually
|
||||
# unallocate the sector rather than make it a zero sector - we want COW, after
|
||||
# all.
|
||||
IMGOPTS='compat=0.10' _make_test_img 1G
|
||||
# Write two clusters, the second one enforces creation of an L2 table after
|
||||
# the first data cluster.
|
||||
$QEMU_IO -c 'write 0k 64k' -c 'write 512M 64k' "$TEST_IMG" | _filter_qemu_io
|
||||
# Discard the first cluster. This cluster will soon enough be reallocated and
|
||||
# used for COW.
|
||||
$QEMU_IO -c 'discard 0k 64k' "$TEST_IMG" | _filter_qemu_io
|
||||
# Now, corrupt the image by marking the second L2 table cluster as free.
|
||||
poke_file "$TEST_IMG" '131084' "\x00\x00" # 0x2000c
|
||||
# Start a write operation requiring COW on the image stopping it right before
|
||||
# doing the read; then, trigger the corruption prevention by writing anything to
|
||||
# any unallocated cluster, leading to an attempt to overwrite the second L2
|
||||
# table. Finally, resume the COW write and see it fail (but not crash).
|
||||
echo "open -o file.driver=blkdebug $TEST_IMG
|
||||
break cow_read 0
|
||||
aio_write 0k 1k
|
||||
wait_break 0
|
||||
write 64k 64k
|
||||
resume 0" | $QEMU_IO | _filter_qemu_io
|
||||
|
||||
# success, all done
|
||||
echo "*** done"
|
||||
rm -f $seq.full
|
||||
|
@ -78,4 +78,19 @@ read 512/512 bytes at offset 0
|
||||
No errors were found on the image.
|
||||
read 512/512 bytes at offset 0
|
||||
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
|
||||
=== Testing overlap while COW is in flight ===
|
||||
|
||||
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
||||
wrote 65536/65536 bytes at offset 0
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
wrote 65536/65536 bytes at offset 536870912
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
discard 65536/65536 bytes at offset 0
|
||||
64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
||||
qcow2: Preventing invalid write on metadata (overlaps with active L2 table); image marked as corrupt.
|
||||
blkdebug: Suspended request '0'
|
||||
write failed: Input/output error
|
||||
blkdebug: Resuming request '0'
|
||||
aio_write failed: No medium found
|
||||
*** done
|
||||
|
Loading…
Reference in New Issue
Block a user