mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: snapshot: Fold formatting of snapshot transaction into prepare func
qemuDomainSnapshotDiskPrepareOne is already called for each disk which is member of the snapshot so we don't need to iterate through the snapshot list again to generate members of the 'transaction' command for each snapshot. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
This commit is contained in:
parent
4258eba6ed
commit
1946485207
@ -15344,7 +15344,8 @@ qemuDomainSnapshotDiskPrepareOne(virQEMUDriverPtr driver,
|
|||||||
virHashTablePtr blockNamedNodeData,
|
virHashTablePtr blockNamedNodeData,
|
||||||
bool reuse,
|
bool reuse,
|
||||||
bool blockdev,
|
bool blockdev,
|
||||||
qemuDomainAsyncJob asyncJob)
|
qemuDomainAsyncJob asyncJob,
|
||||||
|
virJSONValuePtr actions)
|
||||||
{
|
{
|
||||||
virDomainDiskDefPtr persistdisk;
|
virDomainDiskDefPtr persistdisk;
|
||||||
bool supportsCreate;
|
bool supportsCreate;
|
||||||
@ -15417,11 +15418,18 @@ qemuDomainSnapshotDiskPrepareOne(virQEMUDriverPtr driver,
|
|||||||
|
|
||||||
dd->prepared = true;
|
dd->prepared = true;
|
||||||
|
|
||||||
if (blockdev &&
|
if (blockdev) {
|
||||||
qemuDomainSnapshotDiskPrepareOneBlockdev(driver, vm, dd, cfg, reuse,
|
if (qemuDomainSnapshotDiskPrepareOneBlockdev(driver, vm, dd, cfg, reuse,
|
||||||
blockNamedNodeData, asyncJob) < 0)
|
blockNamedNodeData, asyncJob) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (qemuBlockSnapshotAddBlockdev(actions, dd->disk, dd->src) < 0)
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
if (qemuBlockSnapshotAddLegacy(actions, dd->disk, dd->src, reuse) < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15442,7 +15450,8 @@ qemuDomainSnapshotDiskPrepare(virQEMUDriverPtr driver,
|
|||||||
virHashTablePtr blockNamedNodeData,
|
virHashTablePtr blockNamedNodeData,
|
||||||
qemuDomainAsyncJob asyncJob,
|
qemuDomainAsyncJob asyncJob,
|
||||||
qemuDomainSnapshotDiskDataPtr *rdata,
|
qemuDomainSnapshotDiskDataPtr *rdata,
|
||||||
size_t *rndata)
|
size_t *rndata,
|
||||||
|
virJSONValuePtr actions)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
qemuDomainSnapshotDiskDataPtr data;
|
qemuDomainSnapshotDiskDataPtr data;
|
||||||
@ -15462,7 +15471,8 @@ qemuDomainSnapshotDiskPrepare(virQEMUDriverPtr driver,
|
|||||||
data + ndata++,
|
data + ndata++,
|
||||||
blockNamedNodeData,
|
blockNamedNodeData,
|
||||||
reuse, blockdev,
|
reuse, blockdev,
|
||||||
asyncJob) < 0)
|
asyncJob,
|
||||||
|
actions) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15575,7 +15585,7 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
|
|||||||
* have to roll back later */
|
* have to roll back later */
|
||||||
if (qemuDomainSnapshotDiskPrepare(driver, vm, snap, cfg, reuse, blockdev,
|
if (qemuDomainSnapshotDiskPrepare(driver, vm, snap, cfg, reuse, blockdev,
|
||||||
blockNamedNodeData, asyncJob,
|
blockNamedNodeData, asyncJob,
|
||||||
&diskdata, &ndiskdata) < 0)
|
&diskdata, &ndiskdata, actions) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* check whether there's anything to do */
|
/* check whether there's anything to do */
|
||||||
@ -15584,25 +15594,6 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Based on earlier qemuDomainSnapshotPrepare, all disks in this list are
|
|
||||||
* now either VIR_DOMAIN_SNAPSHOT_LOCATION_NONE, or
|
|
||||||
* VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL with a valid file name and
|
|
||||||
* qcow2 format. */
|
|
||||||
for (i = 0; i < ndiskdata; i++) {
|
|
||||||
if (blockdev) {
|
|
||||||
if (qemuBlockSnapshotAddBlockdev(actions,
|
|
||||||
diskdata[i].disk,
|
|
||||||
diskdata[i].src) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
} else {
|
|
||||||
if (qemuBlockSnapshotAddLegacy(actions,
|
|
||||||
diskdata[i].disk,
|
|
||||||
diskdata[i].src,
|
|
||||||
reuse) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user