mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 23:25:48 +00:00
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>
This commit is contained in:
@ -576,6 +576,10 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
|
|||||||
assert(bs);
|
assert(bs);
|
||||||
assert(target);
|
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) {
|
if (bs == target) {
|
||||||
error_setg(errp, "Source and target cannot be the same");
|
error_setg(errp, "Source and target cannot be the same");
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -607,16 +611,7 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
|
|||||||
return NULL;
|
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_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 we need to write to this bitmap, check that we can: */
|
||||||
if (bitmap_mode != BITMAP_SYNC_MODE_NEVER &&
|
if (bitmap_mode != BITMAP_SYNC_MODE_NEVER &&
|
||||||
bdrv_dirty_bitmap_check(sync_bitmap, BDRV_BITMAP_DEFAULT, errp)) {
|
bdrv_dirty_bitmap_check(sync_bitmap, BDRV_BITMAP_DEFAULT, errp)) {
|
||||||
|
10
blockdev.c
10
blockdev.c
@ -3529,6 +3529,16 @@ static BlockJob *do_backup_common(BackupCommon *backup,
|
|||||||
return NULL;
|
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->sync == MIRROR_SYNC_MODE_INCREMENTAL) {
|
||||||
if (backup->has_bitmap_mode &&
|
if (backup->has_bitmap_mode &&
|
||||||
backup->bitmap_mode != BITMAP_SYNC_MODE_ON_SUCCESS) {
|
backup->bitmap_mode != BITMAP_SYNC_MODE_ON_SUCCESS) {
|
||||||
|
Reference in New Issue
Block a user