mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu_snapshot: create: move snapshot redefine to separate function
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
773bf7c846
commit
f4aae9726d
@ -1714,6 +1714,48 @@ qemuSnapshotCreateWriteMetadata(virDomainObj *vm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static virDomainSnapshotPtr
|
||||||
|
qemuSnapshotRedefine(virDomainObj *vm,
|
||||||
|
virDomainPtr domain,
|
||||||
|
virDomainSnapshotDef *def,
|
||||||
|
virQEMUDriver *driver,
|
||||||
|
virQEMUDriverConfig *cfg,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
virDomainMomentObj *snap = NULL;
|
||||||
|
virDomainSnapshotPtr ret = NULL;
|
||||||
|
|
||||||
|
if (virDomainSnapshotRedefinePrep(vm, &def, &snap,
|
||||||
|
driver->xmlopt,
|
||||||
|
flags) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!snap) {
|
||||||
|
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, def)))
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
/* XXX Should we validate that the redefined snapshot even
|
||||||
|
* makes sense, such as checking that qemu-img recognizes the
|
||||||
|
* snapshot name in at least one of the domain's disks? */
|
||||||
|
|
||||||
|
if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT)
|
||||||
|
qemuSnapshotSetCurrent(vm, snap);
|
||||||
|
|
||||||
|
if (qemuSnapshotCreateWriteMetadata(vm, snap, driver, cfg) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
ret = virGetDomainSnapshot(domain, snap->def->name);
|
||||||
|
if (!ret)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
error:
|
||||||
|
virDomainSnapshotObjListRemove(vm->snapshots, snap);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
virDomainSnapshotPtr
|
virDomainSnapshotPtr
|
||||||
qemuSnapshotCreateXML(virDomainPtr domain,
|
qemuSnapshotCreateXML(virDomainPtr domain,
|
||||||
virDomainObj *vm,
|
virDomainObj *vm,
|
||||||
@ -1771,15 +1813,8 @@ qemuSnapshotCreateXML(virDomainPtr domain,
|
|||||||
qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE);
|
qemuDomainObjSetAsyncJobMask(vm, QEMU_JOB_NONE);
|
||||||
|
|
||||||
if (redefine) {
|
if (redefine) {
|
||||||
if (virDomainSnapshotRedefinePrep(vm, &def, &snap,
|
snapshot = qemuSnapshotRedefine(vm, domain, def, driver, cfg, flags);
|
||||||
driver->xmlopt,
|
goto endjob;
|
||||||
flags) < 0)
|
|
||||||
goto endjob;
|
|
||||||
|
|
||||||
if (!snap) {
|
|
||||||
if (!(snap = virDomainSnapshotAssignDef(vm->snapshots, def)))
|
|
||||||
goto endjob;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
virDomainMomentObj *current = NULL;
|
virDomainMomentObj *current = NULL;
|
||||||
|
|
||||||
@ -1801,11 +1836,7 @@ qemuSnapshotCreateXML(virDomainPtr domain,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* actually do the snapshot */
|
/* actually do the snapshot */
|
||||||
if (redefine) {
|
if (virDomainObjIsActive(vm)) {
|
||||||
/* XXX Should we validate that the redefined snapshot even
|
|
||||||
* makes sense, such as checking that qemu-img recognizes the
|
|
||||||
* snapshot name in at least one of the domain's disks? */
|
|
||||||
} else if (virDomainObjIsActive(vm)) {
|
|
||||||
if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY ||
|
if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY ||
|
||||||
virDomainSnapshotObjGetDef(snap)->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
|
virDomainSnapshotObjGetDef(snap)->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) {
|
||||||
/* external full system or disk snapshot */
|
/* external full system or disk snapshot */
|
||||||
@ -1839,7 +1870,7 @@ qemuSnapshotCreateXML(virDomainPtr domain,
|
|||||||
goto endjob;
|
goto endjob;
|
||||||
|
|
||||||
if (!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA)) {
|
if (!(flags & VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA)) {
|
||||||
if (!redefine || (flags & VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT))
|
if ((flags & VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT))
|
||||||
qemuSnapshotSetCurrent(vm, snap);
|
qemuSnapshotSetCurrent(vm, snap);
|
||||||
|
|
||||||
if (qemuSnapshotCreateWriteMetadata(vm, snap, driver, cfg) < 0) {
|
if (qemuSnapshotCreateWriteMetadata(vm, snap, driver, cfg) < 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user