[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 4/5] qcow2: implemented bdrv_is_opened_unclean
From: |
Denis V. Lunev |
Subject: |
[Qemu-devel] [PATCH 4/5] qcow2: implemented bdrv_is_opened_unclean |
Date: |
Wed, 23 Dec 2015 10:46:55 +0300 |
From: Olga Krishtal <address@hidden>
While opening image we save dirty state in header_unclean.
If the image was closed incorrectly we can retrieve this fact
using bdrv_is_opened_unclean callback.
This is necessary in case when we want to call brdv_check to
repair dirty image.
Signed-off-by: Olga Krishtal <address@hidden>
Signed-off-by: Denis V. Lunev <address@hidden>
CC: Kevin Wolf <address@hidden>
CC: Max Reitz <address@hidden>
CC: Eric Blake <address@hidden>
CC: Fam Zheng <address@hidden>
---
block/qcow2.c | 11 ++++++++++-
block/qcow2.h | 1 +
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/block/qcow2.c b/block/qcow2.c
index 1789af4..de3b97f 100644
--- a/block/qcow2.c
+++ b/block/qcow2.c
@@ -817,6 +817,11 @@ static int qcow2_update_options(BlockDriverState *bs,
QDict *options,
return ret;
}
+static bool qcow2_is_opened_unclean(BlockDriverState *bs)
+{
+ return ((BDRVQcow2State *)(bs->opaque))->header_unclean;
+}
+
static int qcow2_open(BlockDriverState *bs, QDict *options, int flags,
Error **errp)
{
@@ -1156,7 +1161,6 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags,
if (!(flags & (BDRV_O_CHECK | BDRV_O_INCOMING)) && !bs->read_only &&
(s->incompatible_features & QCOW2_INCOMPAT_DIRTY)) {
BdrvCheckResult result = {0};
-
ret = qcow2_check(bs, &result, BDRV_FIX_ERRORS | BDRV_FIX_LEAKS);
if (ret < 0) {
error_setg_errno(errp, -ret, "Could not repair dirty image");
@@ -1170,6 +1174,9 @@ static int qcow2_open(BlockDriverState *bs, QDict
*options, int flags,
qcow2_check_refcounts(bs, &result, 0);
}
#endif
+ if (flags & BDRV_O_RDWR) {
+ s->header_unclean = true;
+ }
return ret;
fail:
@@ -1691,6 +1698,7 @@ static void qcow2_close(BlockDriverState *bs)
qemu_vfree(s->l1_table);
/* else pre-write overlap checks in cache_destroy may crash */
s->l1_table = NULL;
+ s->header_unclean = false;
if (!(bs->open_flags & BDRV_O_INCOMING)) {
int ret1, ret2;
@@ -3305,6 +3313,7 @@ BlockDriver bdrv_qcow2 = {
.bdrv_co_get_block_status = qcow2_co_get_block_status,
.bdrv_set_key = qcow2_set_key,
+ .bdrv_is_opened_unclean = qcow2_is_opened_unclean,
.bdrv_co_readv = qcow2_co_readv,
.bdrv_co_writev = qcow2_co_writev,
.bdrv_co_flush_to_os = qcow2_co_flush_to_os,
diff --git a/block/qcow2.h b/block/qcow2.h
index a063a3c..c743d66 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -278,6 +278,7 @@ typedef struct BDRVQcow2State {
int overlap_check; /* bitmask of Qcow2MetadataOverlap values */
bool signaled_corruption;
+ bool header_unclean;
uint64_t incompatible_features;
uint64_t compatible_features;
uint64_t autoclear_features;
--
2.1.4
- Re: [Qemu-devel] [PATCH 10/10] qcow2: Add image locking, (continued)
- Re: [Qemu-devel] [PATCH 00/10] qcow2: Implement image locking, Fam Zheng, 2015/12/22
- Re: [Qemu-devel] [Qemu-block] [PATCH 00/10] qcow2: Implement image locking, Denis V. Lunev, 2015/12/23
- [Qemu-devel] [PATCH 1/5] block: added lock image option and callback, Denis V. Lunev, 2015/12/23
- [Qemu-devel] [PATCH 3/5] block: added check image option and callback bdrv_is_opened_unclean, Denis V. Lunev, 2015/12/23
- Re: [Qemu-devel] [PATCH 3/5] block: added check image option and callback bdrv_is_opened_unclean, Fam Zheng, 2015/12/23
- Re: [Qemu-devel] [PATCH 3/5] block: added check image option and callback bdrv_is_opened_unclean, Denis V. Lunev, 2015/12/23
- [Qemu-devel] [PATCH 4/5] qcow2: implemented bdrv_is_opened_unclean,
Denis V. Lunev <=
- [Qemu-devel] [PATCH 5/5] block/paralels: added paralles implementation for bdrv_is_opened_unclean, Denis V. Lunev, 2015/12/23
- Re: [Qemu-devel] [PATCH RFC 0/5] generic image locking and crash recovery, Fam Zheng, 2015/12/23
- Re: [Qemu-devel] [PATCH RFC 0/5] generic image locking and crash recovery, Denis V. Lunev, 2015/12/23
Re: [Qemu-devel] [PATCH 00/10] qcow2: Implement image locking, Daniel P. Berrange, 2015/12/23
Re: [Qemu-devel] [Qemu-block] [PATCH 00/10] qcow2: Implement image locking, Daniel P. Berrange, 2015/12/23
Re: [Qemu-devel] [Qemu-block] [PATCH 00/10] qcow2: Implement image locking, Denis V. Lunev, 2015/12/23