qemu-img: Factor out code for merging bitmaps
The next patch will add another client that wants to merge dirty bitmaps; it will be easier to refactor the code to construct the QAPI struct correctly into a helper function. Signed-off-by: Eric Blake <eblake@redhat.com> Message-Id: <20200521192137.1120211-4-eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
This commit is contained in:
parent
5d72c68b49
commit
6c729dd832
34
qemu-img.c
34
qemu-img.c
@ -1638,6 +1638,24 @@ out4:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Convenience wrapper around qmp_block_dirty_bitmap_merge */
|
||||
static void do_dirty_bitmap_merge(const char *dst_node, const char *dst_name,
|
||||
const char *src_node, const char *src_name,
|
||||
Error **errp)
|
||||
{
|
||||
BlockDirtyBitmapMergeSource *merge_src;
|
||||
BlockDirtyBitmapMergeSourceList *list;
|
||||
|
||||
merge_src = g_new0(BlockDirtyBitmapMergeSource, 1);
|
||||
merge_src->type = QTYPE_QDICT;
|
||||
merge_src->u.external.node = g_strdup(src_node);
|
||||
merge_src->u.external.name = g_strdup(src_name);
|
||||
list = g_new0(BlockDirtyBitmapMergeSourceList, 1);
|
||||
list->value = merge_src;
|
||||
qmp_block_dirty_bitmap_merge(dst_node, dst_name, list, errp);
|
||||
qapi_free_BlockDirtyBitmapMergeSourceList(list);
|
||||
}
|
||||
|
||||
enum ImgConvertBlockStatus {
|
||||
BLK_DATA,
|
||||
BLK_ZERO,
|
||||
@ -4714,21 +4732,11 @@ static int img_bitmap(int argc, char **argv)
|
||||
qmp_block_dirty_bitmap_disable(bs->node_name, bitmap, &err);
|
||||
op = "disable";
|
||||
break;
|
||||
case BITMAP_MERGE: {
|
||||
BlockDirtyBitmapMergeSource *merge_src;
|
||||
BlockDirtyBitmapMergeSourceList *list;
|
||||
|
||||
merge_src = g_new0(BlockDirtyBitmapMergeSource, 1);
|
||||
merge_src->type = QTYPE_QDICT;
|
||||
merge_src->u.external.node = g_strdup(src_bs->node_name);
|
||||
merge_src->u.external.name = g_strdup(act->src);
|
||||
list = g_new0(BlockDirtyBitmapMergeSourceList, 1);
|
||||
list->value = merge_src;
|
||||
qmp_block_dirty_bitmap_merge(bs->node_name, bitmap, list, &err);
|
||||
qapi_free_BlockDirtyBitmapMergeSourceList(list);
|
||||
case BITMAP_MERGE:
|
||||
do_dirty_bitmap_merge(bs->node_name, bitmap, src_bs->node_name,
|
||||
act->src, &err);
|
||||
op = "merge";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
g_assert_not_reached();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user