[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PULL 14/17] qcow2: Make image inaccessible after failed qc
From: |
Kevin Wolf |
Subject: |
[Qemu-block] [PULL 14/17] qcow2: Make image inaccessible after failed qcow2_invalidate_cache() |
Date: |
Wed, 20 Jan 2016 17:25:03 +0100 |
If qcow2_invalidate_cache() fails, we are in a state where qcow2_close()
has already been completed, but the image hasn't been reopened yet.
Calling into any qcow2 function for an image in this state will cause
crashes.
The real solution would be to get rid of the close/open pair and instead
do an atomic reset of the involved data structures, but this isn't
trivial, so let's just make the image inaccessible for now.
Signed-off-by: Kevin Wolf <address@hidden>
Reviewed-by: Eric Blake <address@hidden>
---
block/qcow2.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/block/qcow2.c b/block/qcow2.c
index 0f8c485..fd8436c 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -1764,6 +1764,7 @@ static void qcow2_invalidate_cache(BlockDriverState *bs,
Error **errp)
bdrv_invalidate_cache(bs->file->bs, &local_err);
if (local_err) {
error_propagate(errp, local_err);
+ bs->drv = NULL;
return;
}
@@ -1776,9 +1777,11 @@ static void qcow2_invalidate_cache(BlockDriverState *bs,
Error **errp)
if (local_err) {
error_propagate(errp, local_err);
error_prepend(errp, "Could not reopen qcow2 layer: ");
+ bs->drv = NULL;
return;
} else if (ret < 0) {
error_setg_errno(errp, -ret, "Could not reopen qcow2 layer");
+ bs->drv = NULL;
return;
}
--
1.8.3.1
- [Qemu-block] [PULL 08/17] block: Assert no write requests under BDRV_O_INCOMING, (continued)
- [Qemu-block] [PULL 08/17] block: Assert no write requests under BDRV_O_INCOMING, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 07/17] qcow2: Write full header on image creation, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 09/17] block: Fix error path in bdrv_invalidate_cache(), Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 06/17] qcow2: Write feature table only for v3 images, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 10/17] block: Rename BDRV_O_INCOMING to BDRV_O_INACTIVE, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 12/17] qcow2: Implement .bdrv_inactivate, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 05/17] block: Clean up includes, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 11/17] block: Inactivate BDS when migration completes, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 13/17] qcow2: Fix BDRV_O_INACTIVE handling in qcow2_invalidate_cache(), Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 14/17] qcow2: Make image inaccessible after failed qcow2_invalidate_cache(),
Kevin Wolf <=
- [Qemu-block] [PULL 15/17] vmdk: Create streamOptimized as version 3, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 17/17] iotests: Test that throttle values ranges, Kevin Wolf, 2016/01/20
- [Qemu-block] [PULL 16/17] blockdev: Error out on negative throttling option values, Kevin Wolf, 2016/01/20
- Re: [Qemu-block] [Qemu-devel] [PULL 00/17] Block patches, Peter Maydell, 2016/01/21