[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 05/24] iotests: Test corruption during COW request
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 05/24] iotests: Test corruption during COW request |
Date: |
Wed, 12 Mar 2014 11:29:13 +0100 |
From: Max Reitz <address@hidden>
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 <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
tests/qemu-iotests/060 | 26 ++++++++++++++++++++++++++
tests/qemu-iotests/060.out | 15 +++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060
index af8ed9f..f0116aa 100755
--- a/tests/qemu-iotests/060
+++ b/tests/qemu-iotests/060
@@ -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
diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out
index 6c7bdbb..a517948 100644
--- a/tests/qemu-iotests/060.out
+++ b/tests/qemu-iotests/060.out
@@ -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
--
1.8.5.3
- [Qemu-devel] [PULL 06/24] block: Rewrite the snapshot authorization mechanism for block filters., (continued)
- [Qemu-devel] [PULL 06/24] block: Rewrite the snapshot authorization mechanism for block filters., Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 07/24] object: add object_get_canonical_path_component(), Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 08/24] rfifolock: add recursive FIFO lock, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 10/24] iothread: add I/O thread object, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 09/24] aio: add aio_context_acquire() and aio_context_release(), Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 12/24] iothread: add "iothread" qdev property type, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 13/24] dataplane: replace internal thread with IOThread, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 17/24] qcow2: Don't write with BDRV_O_INCOMING, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 14/24] iothread: stash thread ID away, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 03/24] qcow2: Check bs->drv in copy_sectors(), Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 05/24] iotests: Test corruption during COW request,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 11/24] qdev: make get_pointer() handle temporary strings, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 15/24] qmp: add query-iothreads command, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 21/24] block/raw-posix: bdrv_parse_filename() for floppy, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 19/24] qemu-io: Fix warnings from static code analysis, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 24/24] block/raw-win32: bdrv_parse_filename() for hdev, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 16/24] qcow2: Keep option in qcow2_invalidate_cache(), Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 18/24] block: Unlink temporary file, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 20/24] block/raw-posix: bdrv_parse_filename() for hdev, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 22/24] block/raw-posix: bdrv_parse_filename() for cdrom, Stefan Hajnoczi, 2014/03/12
- [Qemu-devel] [PULL 23/24] block/raw-posix: Strip protocol prefix on creation, Stefan Hajnoczi, 2014/03/12