qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v3 07/18] block/backup: allow use existent copy-bitm


From: Vladimir Sementsov-Ogievskiy
Subject: [Qemu-devel] [PATCH v3 07/18] block/backup: allow use existent copy-bitmap
Date: Mon, 1 Oct 2018 13:29:17 +0300

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 <address@hidden>
---
 block/backup.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/block/backup.c b/block/backup.c
index ad143ea735..11aa31a323 100644
--- a/block/backup.c
+++ b/block/backup.c
@@ -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;
-- 
2.18.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]