The bs is closed on verification failure to avoid further corruptions. Signed-off-by: Benoit Canet <benoit.ca...@gmail.com> --- 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