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(a)redhat.com>
---
src/qemu/qemu_block.c | 27 ++++++++++++++-------------
src/qemu/qemu_blockjob.c | 4 ++--
src/qemu/qemu_checkpoint.c | 9 +++++----
src/qemu/qemu_driver.c | 7 ++++---
src/qemu/qemu_snapshot.c | 6 ++++--
5 files changed, 29 insertions(+), 24 deletions(-)
diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 4c1a711dd3..edc8edcb70 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -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,
diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c
index cb9948ae2a..0913a224e3 100644
--- a/src/qemu/qemu_blockjob.c
+++ b/src/qemu/qemu_blockjob.c
@@ -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);
diff --git a/src/qemu/qemu_checkpoint.c b/src/qemu/qemu_checkpoint.c
index 8449ed176a..ca58da8fcb 100644
--- a/src/qemu/qemu_checkpoint.c
+++ b/src/qemu/qemu_checkpoint.c
@@ -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;
}
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2d1d0bb3e2..b286d94ca1 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -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);
diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c
index e52d264826..1962ba4027 100644
--- a/src/qemu/qemu_snapshot.c
+++ b/src/qemu/qemu_snapshot.c
@@ -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;
--
2.41.0