[PATCH 11/13] qemuDomainBlockPivot: Handle merging of bitmaps when pivoting an active block-commit

Peter Krempa pkrempa at redhat.com
Wed Mar 4 17:26:39 UTC 2020


Active layer block commit makes the 'base' image the new top image of
the disk after it finishes. This means that all bitmap operations need
to be handled prior to this happening as we'd lose writes otherwise.

The ideal place is to handle it when pivoting to the new image as only
guest-writes would be happening after this point.

Use qemuBlockBitmapsHandleCommitFinish to calculate the merging
transaction.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_driver.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 85612f3281..bc3e495064 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -17288,6 +17288,21 @@ qemuDomainBlockPivot(virQEMUDriverPtr driver,
         break;

     case QEMU_BLOCKJOB_TYPE_ACTIVE_COMMIT:
+        if (blockdev &&
+            virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_INCREMENTAL_BACKUP)) {
+            g_autoptr(virHashTable) blockNamedNodeData = NULL;
+
+            if (!(blockNamedNodeData = qemuBlockGetNamedNodeData(vm, QEMU_ASYNC_JOB_NONE)))
+                return -1;
+
+            if (qemuBlockBitmapsHandleCommitFinish(job->data.commit.top,
+                                                   job->data.commit.base,
+                                                   blockNamedNodeData,
+                                                   &actions,
+                                                   job->data.commit.disabledBitmapsBase) < 0)
+                return -1;
+        }
+
         break;
     }

-- 
2.24.1




More information about the libvir-list mailing list