The bs is closed on verification failure to avoid further corruptions.
Signed-off-by: Benoit Canet <[email protected]>
---
block.h | 1 +
block/qed.c | 14 ++++++++++++++
migration.c | 1 +
3 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/block.h b/block.h
index 1323086..25b66f0 100644
--- a/block.h
+++ b/block.h
@@ -221,6 +221,7 @@ BlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs,
/* Do post incoming migration operations
* Ex: flush mutable metadata
+ * Ex: check image
*/
void bdrv_post_incoming_migration(BlockDriverState *bs);
void bdrv_post_incoming_migration_all(void);
diff --git a/block/qed.c b/block/qed.c
index 25558fc..f6300af 100644
--- a/block/qed.c
+++ b/block/qed.c
@@ -1529,6 +1529,19 @@ static int bdrv_qed_change_backing_file(BlockDriverState
*bs,
return ret;
}
+static void bdrv_qed_check_if_needed(BlockDriverState *bs)
+{
+ /* close the block device if the verification fail */
+ if (check_image_if_needed(bs)) {
+ bdrv_close(bs);
+ }
+}
+
+static void bdrv_qed_post_incoming_migration(BlockDriverState *bs)
+{
+ bdrv_qed_check_if_needed(bs);
+}
+
static int bdrv_qed_check(BlockDriverState *bs, BdrvCheckResult *result)
{
BDRVQEDState *s = bs->opaque;
@@ -1581,6 +1594,7 @@ static BlockDriver bdrv_qed = {
.bdrv_getlength = bdrv_qed_getlength,
.bdrv_get_info = bdrv_qed_get_info,
.bdrv_change_backing_file = bdrv_qed_change_backing_file,
+ .bdrv_post_incoming_migration = bdrv_qed_post_incoming_migration,
.bdrv_check = bdrv_qed_check,
};
diff --git a/migration.c b/migration.c
index 5ac31a3..d59042c 100644
--- a/migration.c
+++ b/migration.c
@@ -95,6 +95,7 @@ void process_incoming_migration(QEMUFile *f)
bdrv_clear_incoming_migration_all();
/* Execute post incoming migration operations :
* for qcow2 make sure to flush mutable metadata
+ * for QED check image
**/
bdrv_post_incoming_migration_all();
--
1.7.7.6