qemu_snapshot: create: don't require disk-only flag for offline external snapshot

Historically creating offline external snapshot required disk-only flag
as well. Now when user requests new snapshot for offline VM and at least
one disk is specified to use external snapshot we will no longer require
disk-only flag as all other not specified disk will use external
snapshots as well.

Resolves: https://issues.redhat.com/browse/RHEL-22797
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
This commit is contained in:
Pavel Hrdina 2024-01-30 12:13:32 +01:00
parent faa2e3bb54
commit 189fdeff10

View File

@ -1582,15 +1582,27 @@ qemuSnapshotCreateXMLValidateDef(virDomainObj *vm,
* to internal snapshots.
*/
static bool
qemuSnapshotCreateUseExternal(virDomainSnapshotDef *def,
qemuSnapshotCreateUseExternal(virDomainObj *vm,
virDomainSnapshotDef *def,
unsigned int flags)
{
size_t i;
if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY)
return true;
if (def->memory == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
return true;
if (!virDomainObjIsActive(vm)) {
/* No need to check all disks as function qemuSnapshotPrepare() guarantees
* that we don't have a combination of internal and external location. */
for (i = 0; i < def->ndisks; i++) {
if (def->disks[i].snapshot == VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL)
return true;
}
}
return false;
}
@ -1623,7 +1635,7 @@ qemuSnapshotCreateAlignDisks(virDomainObj *vm,
return -1;
}
if (qemuSnapshotCreateUseExternal(def, flags)) {
if (qemuSnapshotCreateUseExternal(vm, def, flags)) {
align_location = VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL;
def->state = virDomainObjGetState(vm, NULL);