On Wed, Jun 06, 2018 at 09:37:01PM +0200, Max Reitz wrote: > When signaling a corruption on a read-only image, qcow2 already makes > fatal events non-fatal (i.e., they will not result in the image being > closed, and the image header's corrupt flag will not be set). This is > necessary because we cannot set the corrupt flag on read-only images, > and it is possible because further corruption of read-only images is > impossible. > > Inactive images are effectively read-only, too, so we should do the same > for them. bdrv_is_writable() can tell us whether an image can actually > be written to, so use its result instead of !bs->read_only. > > (Otherwise, the assert(!(bs->open_flags & BDRV_O_INACTIVE)) in > bdrv_co_pwritev() will fail, crashing qemu.) > > Cc: [email protected] > Signed-off-by: Max Reitz <[email protected]>
Reviewed-by: Jeff Cody <[email protected]> > --- > block/qcow2.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/block/qcow2.c b/block/qcow2.c > index 6b2d88759d..6fa5e1d71a 100644 > --- a/block/qcow2.c > +++ b/block/qcow2.c > @@ -4569,7 +4569,7 @@ void qcow2_signal_corruption(BlockDriverState *bs, bool > fatal, int64_t offset, > char *message; > va_list ap; > > - fatal = fatal && !bs->read_only; > + fatal = fatal && bdrv_is_writable(bs); > > if (s->signaled_corruption && > (!fatal || (s->incompatible_features & QCOW2_INCOMPAT_CORRUPT))) > -- > 2.17.0 >
