@@ -53,6 +53,7 @@ typedef struct BackupBlockJob {
QLIST_HEAD(, CowRequest) inflight_reqs;
BdrvDirtyBitmap *copy_bitmap;
+ bool copy_bitmap_created;
bool use_copy_range;
int64_t copy_range_size;
@@ -307,7 +308,7 @@ static void backup_clean(Job *job)
blk_unref(s->target);
s->target = NULL;
- if (s->copy_bitmap) {
+ if (s->copy_bitmap_created) {
bdrv_release_dirty_bitmap(blk_bs(s->common.blk), s->copy_bitmap);
s->copy_bitmap = NULL;
}
@@ -686,11 +687,16 @@ BlockJob *backup_job_create(const char *job_id, BlockDriverState *bs,
job->cluster_size = MAX(BACKUP_CLUSTER_SIZE_DEFAULT, bdi.cluster_size);
}
- if (!x_copy_bitmap) {
+ if (x_copy_bitmap) {
+ job->copy_bitmap = bdrv_find_dirty_bitmap(bs, x_copy_bitmap);
+ } else {
x_copy_bitmap = gen_bitmap_name = id_generate(ID_BLOCK_BITMAP);
}
- job->copy_bitmap = bdrv_create_dirty_bitmap(bs, job->cluster_size,
- x_copy_bitmap, errp);
+ if (!job->copy_bitmap) {
+ job->copy_bitmap = bdrv_create_dirty_bitmap(bs, job->cluster_size,
+ x_copy_bitmap, errp);
+ job->copy_bitmap_created = !!job->copy_bitmap;
+ }
g_free(gen_bitmap_name);
if (!job->copy_bitmap) {
goto error;
Allow use existent copy-bitmap to make it possible to synchronize with externally created fleecing-hook filter which will be introduced soon. Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- block/backup.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)