1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-02-03 17:47:15 +03:00

qemu: Use 'format' nodename accessors for block dirty bitmap operations

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>
This commit is contained in:
Peter Krempa 2023-10-16 16:20:27 +02:00
parent ac6cd5869a
commit abab5130f8
5 changed files with 29 additions and 24 deletions

View 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,

View 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);

View 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;
}

View 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);

View 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;