]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Use 'format' nodename accessors for block dirty bitmap operations
authorPeter Krempa <pkrempa@redhat.com>
Mon, 16 Oct 2023 14:20:27 +0000 (16:20 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 17 Oct 2023 12:16:17 +0000 (14:16 +0200)
In most cases the bitmap operations are relevant only on qcow2 images
thus the 'format' layer will be present. Although in certain specific
cases temporary bitmaps can be created on top of other images as well,
thus we use the 'effective' bitmap name in all cases for bitmap
operations.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_block.c
src/qemu/qemu_blockjob.c
src/qemu/qemu_checkpoint.c
src/qemu/qemu_driver.c
src/qemu/qemu_snapshot.c

index 4c1a711dd35190efa105e0078e457b3c52af671c..edc8edcb7005b29c3b5e43af2974bdf4e8a3d919 100644 (file)
@@ -2807,7 +2807,8 @@ qemuBlockNamedNodeDataGetBitmapByName(GHashTable *blockNamedNodeData,
     qemuBlockNamedNodeData *nodedata;
     size_t i;
 
-    if (!(nodedata = virHashLookup(blockNamedNodeData, src->nodeformat)))
+    if (!(nodedata = virHashLookup(blockNamedNodeData,
+                                   qemuBlockStorageSourceGetEffectiveNodename(src))))
         return NULL;
 
     for (i = 0; i < nodedata->nbitmaps; i++) {
@@ -2863,7 +2864,7 @@ qemuBlockGetBitmapMergeActionsGetBitmaps(virStorageSource *topsrc,
     /* for now it doesn't make sense to consider bitmaps which are not present
      * in @topsrc as we can't recreate a bitmap for a layer if it's missing */
 
-    if (!(entry = virHashLookup(blockNamedNodeData, topsrc->nodeformat)))
+    if (!(entry = virHashLookup(blockNamedNodeData, qemuBlockStorageSourceGetEffectiveNodename(topsrc))))
         return NULL;
 
     for (i = 0; i < entry->nbitmaps; i++) {
@@ -2972,7 +2973,7 @@ qemuBlockGetBitmapMergeActions(virStorageSource *topsrc,
                 granularity = bitmap->granularity;
 
             if (qemuMonitorTransactionBitmapMergeSourceAddBitmap(merge,
-                                                                 n->nodeformat,
+                                                                 qemuBlockStorageSourceGetEffectiveNodename(n),
                                                                  bitmap->name) < 0)
                 return -1;
         }
@@ -2982,7 +2983,7 @@ qemuBlockGetBitmapMergeActions(virStorageSource *topsrc,
                                                              target, curbitmap))) {
 
             if (qemuMonitorTransactionBitmapAdd(act,
-                                                target->nodeformat,
+                                                qemuBlockStorageSourceGetEffectiveNodename(target),
                                                 mergebitmapname,
                                                 mergebitmappersistent,
                                                 mergebitmapdisabled,
@@ -2992,18 +2993,18 @@ qemuBlockGetBitmapMergeActions(virStorageSource *topsrc,
 
         if (writebitmapsrc &&
             qemuMonitorTransactionBitmapMergeSourceAddBitmap(merge,
-                                                             writebitmapsrc->nodeformat,
+                                                             qemuBlockStorageSourceGetEffectiveNodename(writebitmapsrc),
                                                              "libvirt-tmp-activewrite") < 0)
             return -1;
 
-        if (qemuMonitorTransactionBitmapMerge(act, target->nodeformat,
+        if (qemuMonitorTransactionBitmapMerge(act, qemuBlockStorageSourceGetEffectiveNodename(target),
                                               mergebitmapname, &merge) < 0)
             return -1;
     }
 
  done:
     if (writebitmapsrc &&
-        qemuMonitorTransactionBitmapRemove(act, writebitmapsrc->nodeformat,
+        qemuMonitorTransactionBitmapRemove(act, qemuBlockStorageSourceGetEffectiveNodename(writebitmapsrc),
                                            "libvirt-tmp-activewrite") < 0)
         return -1;
 
@@ -3578,8 +3579,8 @@ qemuBlockCommit(virDomainObj *vm,
     rc = qemuMonitorBlockCommit(priv->mon,
                                 qemuDomainDiskGetTopNodename(disk),
                                 job->name,
-                                topSource->nodeformat,
-                                baseSource->nodeformat,
+                                qemuBlockStorageSourceGetEffectiveNodename(topSource),
+                                qemuBlockStorageSourceGetEffectiveNodename(baseSource),
                                 backingPath, bandwidth,
                                 autofinalize);
 
@@ -3663,7 +3664,7 @@ qemuBlockPivot(virDomainObj *vm,
             bitmapactions = virJSONValueNewArray();
 
             if (qemuMonitorTransactionBitmapAdd(bitmapactions,
-                                                disk->mirror->nodeformat,
+                                                qemuBlockStorageSourceGetEffectiveNodename(disk->mirror),
                                                 "libvirt-tmp-activewrite",
                                                 false,
                                                 false,
@@ -3684,8 +3685,8 @@ qemuBlockPivot(virDomainObj *vm,
                 reopenactions = virJSONValueNewArray();
 
                 if (qemuMonitorTransactionSnapshotBlockdev(reopenactions,
-                                                           disk->mirror->backingStore->nodeformat,
-                                                           disk->mirror->nodeformat))
+                                                           qemuBlockStorageSourceGetEffectiveNodename(disk->mirror->backingStore),
+                                                           qemuBlockStorageSourceGetFormatNodename(disk->mirror)))
                     return -1;
             }
 
@@ -3696,7 +3697,7 @@ qemuBlockPivot(virDomainObj *vm,
         bitmapactions = virJSONValueNewArray();
 
         if (qemuMonitorTransactionBitmapAdd(bitmapactions,
-                                            job->data.commit.base->nodeformat,
+                                            qemuBlockStorageSourceGetEffectiveNodename(job->data.commit.base),
                                             "libvirt-tmp-activewrite",
                                             false,
                                             false,
index cb9948ae2a5995a1f3b818d5d87037e0a0768f59..0913a224e350fe2fd0f6e6b413207951da9508a7 100644 (file)
@@ -1301,7 +1301,7 @@ qemuBlockJobProcessEventFailedActiveCommit(virQEMUDriver *driver,
         return;
 
     qemuMonitorBitmapRemove(priv->mon,
-                            disk->mirror->nodeformat,
+                            qemuBlockStorageSourceGetEffectiveNodename(disk->mirror),
                             "libvirt-tmp-activewrite");
 
     qemuDomainObjExitMonitor(vm);
@@ -1388,7 +1388,7 @@ qemuBlockJobProcessEventConcludedBackup(virQEMUDriver *driver,
 
     if (job->data.backup.bitmap)
         qemuMonitorBitmapRemove(qemuDomainGetMonitor(vm),
-                                job->disk->src->nodeformat,
+                                qemuBlockStorageSourceGetEffectiveNodename(job->disk->src),
                                 job->data.backup.bitmap);
 
     qemuDomainObjExitMonitor(vm);
index 8449ed176a07f746015b31cc41d8ebd57a75ddc1..ca58da8fcbf1a8484a7ccf73ff33ddafc0205b92 100644 (file)
@@ -154,7 +154,7 @@ qemuCheckpointDiscardDiskBitmaps(virStorageSource *src,
         found = true;
 
         if (qemuMonitorTransactionBitmapRemove(actions,
-                                               n->nodeformat,
+                                               qemuBlockStorageSourceGetEffectiveNodename(n),
                                                bitmapdata->name) < 0)
             return -1;
 
@@ -395,7 +395,8 @@ qemuCheckpointAddActions(virDomainObj *vm,
             chkdisk->type != VIR_DOMAIN_CHECKPOINT_TYPE_BITMAP)
             continue;
 
-        if (qemuMonitorTransactionBitmapAdd(actions, domdisk->src->nodeformat,
+        if (qemuMonitorTransactionBitmapAdd(actions,
+                                            qemuBlockStorageSourceGetEffectiveNodename(domdisk->src),
                                             chkdisk->bitmap, true, false, 0) < 0)
             return -1;
     }
@@ -704,7 +705,7 @@ qemuCheckpointGetXMLDescUpdateSize(virDomainObj *vm,
                 recoveractions = virJSONValueNewArray();
 
             if (qemuMonitorTransactionBitmapRemove(recoveractions,
-                                                   domdisk->src->nodeformat,
+                                                   qemuBlockStorageSourceGetEffectiveNodename(domdisk->src),
                                                    "libvirt-tmp-size-xml") < 0)
                 goto endjob;
         }
@@ -718,7 +719,7 @@ qemuCheckpointGetXMLDescUpdateSize(virDomainObj *vm,
             goto endjob;
 
         if (qemuMonitorTransactionBitmapRemove(cleanupactions,
-                                               domdisk->src->nodeformat,
+                                               qemuBlockStorageSourceGetEffectiveNodename(domdisk->src),
                                                "libvirt-tmp-size-xml") < 0)
             goto endjob;
     }
index 2d1d0bb3e2c7a69b0e2f448a4a7cb0966a3aaf61..b286d94ca104cf54ee7c4fc2010454ab5d8725b0 100644 (file)
@@ -13634,7 +13634,7 @@ qemuDomainBlockPullCommon(virDomainObj *vm,
         goto endjob;
 
     if (baseSource) {
-        nodebase = baseSource->nodeformat;
+        nodebase = qemuBlockStorageSourceGetEffectiveNodename(baseSource);
         if (!backingPath &&
             !(backingPath = qemuBlockGetBackingStoreString(baseSource, false)))
             goto endjob;
@@ -13642,7 +13642,7 @@ qemuDomainBlockPullCommon(virDomainObj *vm,
 
     qemuDomainObjEnterMonitor(vm);
     ret = qemuMonitorBlockStream(priv->mon,
-                                 disk->src->nodeformat,
+                                 qemuBlockStorageSourceGetEffectiveNodename(disk->src),
                                  job->name,
                                  nodebase,
                                  backingPath,
@@ -14327,7 +14327,8 @@ qemuDomainBlockCopyCommon(virDomainObj *vm,
 
     ret = qemuMonitorBlockdevMirror(priv->mon, job->name, true,
                                     qemuDomainDiskGetTopNodename(disk),
-                                    mirror->nodeformat, bandwidth,
+                                    qemuBlockStorageSourceGetEffectiveNodename(mirror),
+                                    bandwidth,
                                     granularity, buf_size, mirror_shallow,
                                     syncWrites);
 
index e52d2648260dd06ce18937be90a8bbf1b0c9c70a..1962ba402793c6d84093032c2d97b0ff0d3a482b 100644 (file)
@@ -959,7 +959,8 @@ qemuSnapshotDiskBitmapsPropagate(qemuSnapshotDiskData *dd,
     qemuBlockNamedNodeData *entry;
     size_t i;
 
-    if (!(entry = virHashLookup(blockNamedNodeData, dd->disk->src->nodeformat)))
+    if (!(entry = virHashLookup(blockNamedNodeData,
+                                qemuBlockStorageSourceGetEffectiveNodename(dd->disk->src))))
         return 0;
 
     for (i = 0; i < entry->nbitmaps; i++) {
@@ -969,7 +970,8 @@ qemuSnapshotDiskBitmapsPropagate(qemuSnapshotDiskData *dd,
         if (!bitmap->persistent || !bitmap->recording || bitmap->inconsistent)
             continue;
 
-        if (qemuMonitorTransactionBitmapAdd(actions, dd->src->nodeformat,
+        if (qemuMonitorTransactionBitmapAdd(actions,
+                                            qemuBlockStorageSourceGetEffectiveNodename(dd->src),
                                             bitmap->name, true, false,
                                             bitmap->granularity) < 0)
             return -1;