From 19b6914ef5479fad54896354d2c93267ac2cc6de Mon Sep 17 00:00:00 2001 From: Chen Qun Date: Mon, 29 Jul 2019 16:35:55 -0400 Subject: [PATCH] block/backup: hoist bitmap check into QMP interface This is nicer to do in the unified QMP interface that we have now, because it lets us use the right terminology back at the user. Signed-off-by: John Snow Reviewed-by: Max Reitz Message-id: 20190716000117.25219-5-jsnow@redhat.com Signed-off-by: John Snow --- ...oist-bitmap-check-into-QMP-interface.patch | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 block-backup-hoist-bitmap-check-into-QMP-interface.patch diff --git a/block-backup-hoist-bitmap-check-into-QMP-interface.patch b/block-backup-hoist-bitmap-check-into-QMP-interface.patch new file mode 100644 index 0000000..51dc67c --- /dev/null +++ b/block-backup-hoist-bitmap-check-into-QMP-interface.patch @@ -0,0 +1,73 @@ +From 9cc9e9657aad126502183fa4ceb9b962b55471cb Mon Sep 17 00:00:00 2001 +From: John Snow +Date: Mon, 29 Jul 2019 16:35:55 -0400 +Subject: [PATCH] block/backup: hoist bitmap check into QMP interface + +This is nicer to do in the unified QMP interface that we have now, +because it lets us use the right terminology back at the user. + +Signed-off-by: John Snow +Reviewed-by: Max Reitz +Message-id: 20190716000117.25219-5-jsnow@redhat.com +Signed-off-by: John Snow +--- + block/backup.c | 13 ++++--------- + blockdev.c | 10 ++++++++++ + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/block/backup.c b/block/backup.c +index 59ac2c0396..cc19643b47 100644 +--- a/block/backup.c ++++ b/block/backup.c +@@ -565,6 +565,10 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, + assert(bs); + assert(target); + ++ /* QMP interface protects us from these cases */ ++ assert(sync_mode != MIRROR_SYNC_MODE_INCREMENTAL); ++ assert(sync_bitmap || sync_mode != MIRROR_SYNC_MODE_BITMAP); ++ + if (bs == target) { + error_setg(errp, "Source and target cannot be the same"); + return NULL; +@@ -596,16 +600,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs, + return NULL; + } + +- /* QMP interface should have handled translating this to bitmap mode */ +- assert(sync_mode != MIRROR_SYNC_MODE_INCREMENTAL); +- + if (sync_mode == MIRROR_SYNC_MODE_BITMAP) { +- if (!sync_bitmap) { +- error_setg(errp, "must provide a valid bitmap name for " +- "'%s' sync mode", MirrorSyncMode_str(sync_mode)); +- return NULL; +- } +- + /* If we need to write to this bitmap, check that we can: */ + if (bitmap_mode != BITMAP_SYNC_MODE_NEVER && + bdrv_dirty_bitmap_check(sync_bitmap, BDRV_BITMAP_DEFAULT, errp)) { +diff --git a/blockdev.c b/blockdev.c +index efb69d343a..0a71a15fa2 100644 +--- a/blockdev.c ++++ b/blockdev.c +@@ -3508,6 +3508,16 @@ static BlockJob *do_backup_common(BackupCommon *backup, + return NULL; + } + ++ if ((backup->sync == MIRROR_SYNC_MODE_BITMAP) || ++ (backup->sync == MIRROR_SYNC_MODE_INCREMENTAL)) { ++ /* done before desugaring 'incremental' to print the right message */ ++ if (!backup->has_bitmap) { ++ error_setg(errp, "must provide a valid bitmap name for " ++ "'%s' sync mode", MirrorSyncMode_str(backup->sync)); ++ return NULL; ++ } ++ } ++ + if (backup->sync == MIRROR_SYNC_MODE_INCREMENTAL) { + if (backup->has_bitmap_mode && + backup->bitmap_mode != BITMAP_SYNC_MODE_ON_SUCCESS) { +-- +2.27.0 +