|
|
9ae3a8 |
From 8ddf0e61ad5bc3ab854a04f6b20d996ef4ed0ae2 Mon Sep 17 00:00:00 2001
|
|
|
9ae3a8 |
From: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
Date: Mon, 17 Mar 2014 22:45:31 +0100
|
|
|
9ae3a8 |
Subject: [PATCH 6/6] iotests: Test corruption during COW request
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
RH-Author: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
Message-id: <1395096331-12610-4-git-send-email-mreitz@redhat.com>
|
|
|
9ae3a8 |
Patchwork-id: 58121
|
|
|
9ae3a8 |
O-Subject: [RHEL-7.0 qemu-kvm PATCH 3/3] iotests: Test corruption during COW request
|
|
|
9ae3a8 |
Bugzilla: 1048575
|
|
|
9ae3a8 |
RH-Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
|
|
|
9ae3a8 |
RH-Acked-by: Fam Zheng <famz@redhat.com>
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
BZ: 1048575
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Extend test file 060 by a test case for corruption occuring concurrently
|
|
|
9ae3a8 |
to a COW request. QEMU should not crash but rather return an appropriate
|
|
|
9ae3a8 |
error message.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
|
|
|
9ae3a8 |
(cherry picked from commit 98d39e34fe95f8609be3ccbd1b67926631d2c7c0)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Conflicts:
|
|
|
9ae3a8 |
tests/qemu-iotests/060
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
As the series allowing blkdebug to be used through the QMP interfaces
|
|
|
9ae3a8 |
has not yet been backported, this test may not use
|
|
|
9ae3a8 |
"-o file.driver=blkdebug" to select the blkdebug block driver, but
|
|
|
9ae3a8 |
rather "blkdebug::$TEST_IMG" as the filename.
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Max Reitz <mreitz@redhat.com>
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
tests/qemu-iotests/060 | 26 ++++++++++++++++++++++++++
|
|
|
9ae3a8 |
tests/qemu-iotests/060.out | 15 +++++++++++++++
|
|
|
9ae3a8 |
2 files changed, 41 insertions(+)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
9ae3a8 |
---
|
|
|
9ae3a8 |
tests/qemu-iotests/060 | 26 ++++++++++++++++++++++++++
|
|
|
9ae3a8 |
tests/qemu-iotests/060.out | 15 +++++++++++++++
|
|
|
9ae3a8 |
2 files changed, 41 insertions(+), 0 deletions(-)
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
diff --git a/tests/qemu-iotests/060 b/tests/qemu-iotests/060
|
|
|
9ae3a8 |
index bbb1909..2abd566 100644
|
|
|
9ae3a8 |
--- a/tests/qemu-iotests/060
|
|
|
9ae3a8 |
+++ b/tests/qemu-iotests/060
|
|
|
9ae3a8 |
@@ -138,6 +138,32 @@ $QEMU_IMG snapshot -a foo "$TEST_IMG"
|
|
|
9ae3a8 |
_check_test_img
|
|
|
9ae3a8 |
$QEMU_IO -c "$OPEN_RO" -c "read -P 1 0 512" | _filter_qemu_io
|
|
|
9ae3a8 |
|
|
|
9ae3a8 |
+echo
|
|
|
9ae3a8 |
+echo "=== Testing overlap while COW is in flight ==="
|
|
|
9ae3a8 |
+echo
|
|
|
9ae3a8 |
+# compat=0.10 is required in order to make the following discard actually
|
|
|
9ae3a8 |
+# unallocate the sector rather than make it a zero sector - we want COW, after
|
|
|
9ae3a8 |
+# all.
|
|
|
9ae3a8 |
+IMGOPTS='compat=0.10' _make_test_img 1G
|
|
|
9ae3a8 |
+# Write two clusters, the second one enforces creation of an L2 table after
|
|
|
9ae3a8 |
+# the first data cluster.
|
|
|
9ae3a8 |
+$QEMU_IO -c 'write 0k 64k' -c 'write 512M 64k' "$TEST_IMG" | _filter_qemu_io
|
|
|
9ae3a8 |
+# Discard the first cluster. This cluster will soon enough be reallocated and
|
|
|
9ae3a8 |
+# used for COW.
|
|
|
9ae3a8 |
+$QEMU_IO -c 'discard 0k 64k' "$TEST_IMG" | _filter_qemu_io
|
|
|
9ae3a8 |
+# Now, corrupt the image by marking the second L2 table cluster as free.
|
|
|
9ae3a8 |
+poke_file "$TEST_IMG" '131084' "\x00\x00" # 0x2000c
|
|
|
9ae3a8 |
+# Start a write operation requiring COW on the image stopping it right before
|
|
|
9ae3a8 |
+# doing the read; then, trigger the corruption prevention by writing anything to
|
|
|
9ae3a8 |
+# any unallocated cluster, leading to an attempt to overwrite the second L2
|
|
|
9ae3a8 |
+# table. Finally, resume the COW write and see it fail (but not crash).
|
|
|
9ae3a8 |
+echo "open blkdebug::$TEST_IMG
|
|
|
9ae3a8 |
+break cow_read 0
|
|
|
9ae3a8 |
+aio_write 0k 1k
|
|
|
9ae3a8 |
+wait_break 0
|
|
|
9ae3a8 |
+write 64k 64k
|
|
|
9ae3a8 |
+resume 0" | $QEMU_IO | _filter_qemu_io
|
|
|
9ae3a8 |
+
|
|
|
9ae3a8 |
# success, all done
|
|
|
9ae3a8 |
echo "*** done"
|
|
|
9ae3a8 |
rm -f $seq.full
|
|
|
9ae3a8 |
diff --git a/tests/qemu-iotests/060.out b/tests/qemu-iotests/060.out
|
|
|
9ae3a8 |
index 6c7bdbb..a517948 100644
|
|
|
9ae3a8 |
--- a/tests/qemu-iotests/060.out
|
|
|
9ae3a8 |
+++ b/tests/qemu-iotests/060.out
|
|
|
9ae3a8 |
@@ -78,4 +78,19 @@ read 512/512 bytes at offset 0
|
|
|
9ae3a8 |
No errors were found on the image.
|
|
|
9ae3a8 |
read 512/512 bytes at offset 0
|
|
|
9ae3a8 |
512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
9ae3a8 |
+
|
|
|
9ae3a8 |
+=== Testing overlap while COW is in flight ===
|
|
|
9ae3a8 |
+
|
|
|
9ae3a8 |
+Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1073741824
|
|
|
9ae3a8 |
+wrote 65536/65536 bytes at offset 0
|
|
|
9ae3a8 |
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
9ae3a8 |
+wrote 65536/65536 bytes at offset 536870912
|
|
|
9ae3a8 |
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
9ae3a8 |
+discard 65536/65536 bytes at offset 0
|
|
|
9ae3a8 |
+64 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
9ae3a8 |
+qcow2: Preventing invalid write on metadata (overlaps with active L2 table); image marked as corrupt.
|
|
|
9ae3a8 |
+blkdebug: Suspended request '0'
|
|
|
9ae3a8 |
+write failed: Input/output error
|
|
|
9ae3a8 |
+blkdebug: Resuming request '0'
|
|
|
9ae3a8 |
+aio_write failed: No medium found
|
|
|
9ae3a8 |
*** done
|
|
|
9ae3a8 |
--
|
|
|
9ae3a8 |
1.7.1
|
|
|
9ae3a8 |
|