[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH 07/10] qed: extract image checking into check_im
From: |
Benoît Canet |
Subject: |
[Qemu-devel] [RFC PATCH 07/10] qed: extract image checking into check_image_if_needed |
Date: |
Tue, 6 Mar 2012 18:32:26 +0100 |
Signed-off-by: Benoit Canet <address@hidden>
---
block/qed.c | 55 ++++++++++++++++++++++++++++++++++---------------------
1 files changed, 34 insertions(+), 21 deletions(-)
diff --git a/block/qed.c b/block/qed.c
index a041d31..25558fc 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -367,6 +367,37 @@ static void qed_cancel_need_check_timer(BDRVQEDState *s)
qemu_del_timer(s->need_check_timer);
}
+static int check_image_if_needed(BlockDriverState *bs)
+{
+ int ret;
+ BDRVQEDState *s = bs->opaque;
+
+ if (s->header.features & QED_F_NEED_CHECK) {
+ /* Read-only images cannot be fixed. There is no risk of corruption
+ * since write operations are not possible. Therefore, allow
+ * potentially inconsistent images to be opened read-only. This can
+ * aid data recovery from an otherwise inconsistent image.
+ */
+ if (!bdrv_is_read_only(bs->file)) {
+ BdrvCheckResult result = {0};
+
+ ret = qed_check(s, &result, true);
+ if (ret) {
+ return ret;
+ }
+ if (!result.corruptions && !result.check_errors) {
+ /* Ensure fixes reach storage before clearing check bit */
+ bdrv_flush(s->bs);
+
+ s->header.features &= ~QED_F_NEED_CHECK;
+ qed_write_header_sync(s);
+ }
+ }
+ }
+
+ return 0;
+}
+
static int bdrv_qed_open(BlockDriverState *bs, int flags)
{
BDRVQEDState *s = bs->opaque;
@@ -471,27 +502,9 @@ static int bdrv_qed_open(BlockDriverState *bs, int flags)
}
/* If image was not closed cleanly, check consistency */
- if (s->header.features & QED_F_NEED_CHECK) {
- /* Read-only images cannot be fixed. There is no risk of corruption
- * since write operations are not possible. Therefore, allow
- * potentially inconsistent images to be opened read-only. This can
- * aid data recovery from an otherwise inconsistent image.
- */
- if (!bdrv_is_read_only(bs->file)) {
- BdrvCheckResult result = {0};
-
- ret = qed_check(s, &result, true);
- if (ret) {
- goto out;
- }
- if (!result.corruptions && !result.check_errors) {
- /* Ensure fixes reach storage before clearing check bit */
- bdrv_flush(s->bs);
-
- s->header.features &= ~QED_F_NEED_CHECK;
- qed_write_header_sync(s);
- }
- }
+ ret = check_image_if_needed(bs);
+ if (ret) {
+ goto out;
}
s->need_check_timer = qemu_new_timer_ns(vm_clock,
--
1.7.7.6
- [Qemu-devel] [RFC PATCH 00/10] make qed and live migration usage safe, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 01/10] block: Add new BDRV_O_INCOMING flag to notice incoming live migration, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 02/10] block: add a function to set incoming live migration, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 03/10] block: add a function to clear incoming live migration, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 09/10] qed: honor BDRV_O_INCOMING for incoming live migration, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 08/10] qed: add bdrv_post_incoming_migration operation checking the image, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 05/10] migration: inform the block layer of incoming live status, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 07/10] qed: extract image checking into check_image_if_needed,
Benoît Canet <=
- [Qemu-devel] [RFC PATCH 10/10] qed: remove incoming live migration blocker, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 04/10] block: rename *_invalidate_cache_* to *_post_incoming_migration_*, Benoît Canet, 2012/03/06
- [Qemu-devel] [RFC PATCH 06/10] block: open images with BDRV_O_INCOMING on incoming live migration, Benoît Canet, 2012/03/06
- Re: [Qemu-devel] [RFC PATCH 00/10] make qed and live migration usage safe, Benoît Canet, 2012/03/06
- Re: [Qemu-devel] [RFC PATCH 00/10] make qed and live migration usage safe, Benoît Canet, 2012/03/16
- Re: [Qemu-devel] [RFC PATCH 00/10] make qed and live migration usage safe, Stefan Hajnoczi, 2012/03/20