26ba25
From 425f93585b5a8f45198e91acce68bc0e921c0bf5 Mon Sep 17 00:00:00 2001
26ba25
From: Max Reitz <mreitz@redhat.com>
26ba25
Date: Mon, 18 Jun 2018 18:00:54 +0200
26ba25
Subject: [PATCH 057/268] qcow2: Do not mark inactive images corrupt
26ba25
26ba25
RH-Author: Max Reitz <mreitz@redhat.com>
26ba25
Message-id: <20180618180055.22739-3-mreitz@redhat.com>
26ba25
Patchwork-id: 80793
26ba25
O-Subject: [RHV-7.6 qemu-kvm-rhev PATCH 2/3] qcow2: Do not mark inactive images corrupt
26ba25
Bugzilla: 1588039
26ba25
RH-Acked-by: Jeffrey Cody <jcody@redhat.com>
26ba25
RH-Acked-by: Kevin Wolf <kwolf@redhat.com>
26ba25
RH-Acked-by: John Snow <jsnow@redhat.com>
26ba25
26ba25
When signaling a corruption on a read-only image, qcow2 already makes
26ba25
fatal events non-fatal (i.e., they will not result in the image being
26ba25
closed, and the image header's corrupt flag will not be set).  This is
26ba25
necessary because we cannot set the corrupt flag on read-only images,
26ba25
and it is possible because further corruption of read-only images is
26ba25
impossible.
26ba25
26ba25
Inactive images are effectively read-only, too, so we should do the same
26ba25
for them.  bdrv_is_writable() can tell us whether an image can actually
26ba25
be written to, so use its result instead of !bs->read_only.
26ba25
26ba25
(Otherwise, the assert(!(bs->open_flags & BDRV_O_INACTIVE)) in
26ba25
bdrv_co_pwritev() will fail, crashing qemu.)
26ba25
26ba25
Cc: qemu-stable@nongnu.org
26ba25
Signed-off-by: Max Reitz <mreitz@redhat.com>
26ba25
Message-id: 20180606193702.7113-3-mreitz@redhat.com
26ba25
Reviewed-by: John Snow <jsnow@redhat.com>
26ba25
Reviewed-by: Jeff Cody <jcody@redhat.com>
26ba25
Signed-off-by: Max Reitz <mreitz@redhat.com>
26ba25
(cherry picked from commit ddf3b47ef4b5ed0bf6558d4c2c8ae130b8d8a580)
26ba25
Signed-off-by: Max Reitz <mreitz@redhat.com>
26ba25
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
26ba25
---
26ba25
 block/qcow2.c | 2 +-
26ba25
 1 file changed, 1 insertion(+), 1 deletion(-)
26ba25
26ba25
diff --git a/block/qcow2.c b/block/qcow2.c
26ba25
index 35842c5..26a6a7f 100644
26ba25
--- a/block/qcow2.c
26ba25
+++ b/block/qcow2.c
26ba25
@@ -4383,7 +4383,7 @@ void qcow2_signal_corruption(BlockDriverState *bs, bool fatal, int64_t offset,
26ba25
     char *message;
26ba25
     va_list ap;
26ba25
 
26ba25
-    fatal = fatal && !bs->read_only;
26ba25
+    fatal = fatal && bdrv_is_writable(bs);
26ba25
 
26ba25
     if (s->signaled_corruption &&
26ba25
         (!fatal || (s->incompatible_features & QCOW2_INCOMPAT_CORRUPT)))
26ba25
-- 
26ba25
1.8.3.1
26ba25