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 +