Introduce new function qemuSnapshotCreateUseExternal() that will return true if we will use external snapshots as default location. Signed-off-by: Pavel Hrdina <phrdina@xxxxxxxxxx> --- src/qemu/qemu_snapshot.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index 73ff533827..ab7b47319b 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -1576,6 +1576,20 @@ qemuSnapshotCreateXMLValidateDef(virDomainObj *vm, } +static bool +qemuSnapshotCreateUseExternal(virDomainSnapshotDef *def, + unsigned int flags) +{ + if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) + return true; + + if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) + return true; + + return false; +} + + static int qemuSnapshotCreateAlignDisks(virDomainObj *vm, virDomainSnapshotDef *def, @@ -1584,7 +1598,7 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm, { g_autofree char *xml = NULL; qemuDomainObjPrivate *priv = vm->privateData; - virDomainSnapshotLocation align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL; + virDomainSnapshotLocation align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_DEFAULT; /* Easiest way to clone inactive portion of vm->def is via * conversion in and back out of xml. */ @@ -1604,17 +1618,19 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm, return -1; } - if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) { + if (qemuSnapshotCreateUseExternal(def, flags)) { align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL; - if (virDomainObjIsActive(vm)) - def->state = VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT; - else - def->state = VIR_DOMAIN_SNAPSHOT_SHUTOFF; - def->memory = VIR_DOMAIN_SNAPSHOT_LOCATION_NO; - } else if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL) { def->state = virDomainObjGetState(vm, NULL); - align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL; + + if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) { + if (virDomainObjIsActive(vm)) + def->state = VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT; + else + def->state = VIR_DOMAIN_SNAPSHOT_SHUTOFF; + def->memory = VIR_DOMAIN_SNAPSHOT_LOCATION_NO; + } } else { + align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_INTERNAL; def->state = virDomainObjGetState(vm, NULL); if (virDomainObjIsActive(vm) && -- 2.43.0 _______________________________________________ Devel mailing list -- devel@xxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx