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:
parent
ac6cd5869a
commit
abab5130f8
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user