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 <jsnow@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Message-id: 20190716000117.25219-5-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
74 lines
2.7 KiB
Diff
74 lines
2.7 KiB
Diff
From 9cc9e9657aad126502183fa4ceb9b962b55471cb Mon Sep 17 00:00:00 2001
|
|
From: John Snow <jsnow@redhat.com>
|
|
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 <jsnow@redhat.com>
|
|
Reviewed-by: Max Reitz <mreitz@redhat.com>
|
|
Message-id: 20190716000117.25219-5-jsnow@redhat.com
|
|
Signed-off-by: John Snow <jsnow@redhat.com>
|
|
---
|
|
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
|
|
|