qemu: Use virDomainSnapshotState for switch statements

Clean up the previous patch which abused switch on virDomainState
while working with a variable containing virDomainSnapshotState, by
converting the two affected switch statements to now use the right
enum.

Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
Eric Blake 2019-03-07 15:12:40 -06:00
parent f43eb6807e
commit 1ceb0e9337

View File

@ -15681,7 +15681,7 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
virQEMUDriverConfigPtr cfg = NULL; virQEMUDriverConfigPtr cfg = NULL;
virCapsPtr caps = NULL; virCapsPtr caps = NULL;
qemuDomainObjPrivatePtr priv; qemuDomainObjPrivatePtr priv;
virDomainState state; virDomainSnapshotState state;
virCheckFlags(VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE | virCheckFlags(VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE |
VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT | VIR_DOMAIN_SNAPSHOT_CREATE_CURRENT |
@ -15767,36 +15767,36 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
} }
/* allow snapshots only in certain states */ /* allow snapshots only in certain states */
state = vm->state.state; state = redefine ? def->state : vm->state.state;
if (redefine)
state = def->state == VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT ? VIR_DOMAIN_SHUTOFF :
def->state;
/* FIXME: state should be virDomainSnapshotState, with the switch
* statement handling of VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT (the only
* enum value added beyond what virDomainState supports). But for
* now it doesn't matter, because we slammed the extra snapshot
* state into a safe domain state. */
switch (state) { switch (state) {
/* valid states */ /* valid states */
case VIR_DOMAIN_RUNNING: case VIR_DOMAIN_SNAPSHOT_RUNNING:
case VIR_DOMAIN_PAUSED: case VIR_DOMAIN_SNAPSHOT_PAUSED:
case VIR_DOMAIN_SHUTDOWN: case VIR_DOMAIN_SNAPSHOT_SHUTDOWN:
case VIR_DOMAIN_SHUTOFF: case VIR_DOMAIN_SNAPSHOT_SHUTOFF:
case VIR_DOMAIN_CRASHED: case VIR_DOMAIN_SNAPSHOT_CRASHED:
break; break;
case VIR_DOMAIN_PMSUSPENDED: case VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT:
if (!redefine) {
virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid domain state %s"),
virDomainSnapshotStateTypeToString(state));
goto cleanup;
}
break;
case VIR_DOMAIN_SNAPSHOT_PMSUSPENDED:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("qemu doesn't support taking snapshots of " _("qemu doesn't support taking snapshots of "
"PMSUSPENDED guests")); "PMSUSPENDED guests"));
goto cleanup; goto cleanup;
/* invalid states */ /* invalid states */
case VIR_DOMAIN_NOSTATE: case VIR_DOMAIN_SNAPSHOT_NOSTATE:
case VIR_DOMAIN_BLOCKED: /* invalid state, unused in qemu */ case VIR_DOMAIN_SNAPSHOT_BLOCKED: /* invalid state, unused in qemu */
case VIR_DOMAIN_LAST: case VIR_DOMAIN_SNAPSHOT_LAST:
virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid domain state %s"), virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid domain state %s"),
virDomainStateTypeToString(state)); virDomainSnapshotStateTypeToString(state));
goto cleanup; goto cleanup;
} }
@ -16474,14 +16474,9 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
cookie = (qemuDomainSaveCookiePtr) snap->def->cookie; cookie = (qemuDomainSaveCookiePtr) snap->def->cookie;
/* FIXME: This cast should be to virDomainSnapshotState, with switch ((virDomainSnapshotState) snap->def->state) {
* better handling of VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT (the only enum case VIR_DOMAIN_SNAPSHOT_RUNNING:
* value added beyond what virDomainState supports). But for now case VIR_DOMAIN_SNAPSHOT_PAUSED:
* it doesn't matter, because of the above rejection of revert to
* external snapshots. */
switch ((virDomainState) snap->def->state) {
case VIR_DOMAIN_RUNNING:
case VIR_DOMAIN_PAUSED:
start_flags |= VIR_QEMU_PROCESS_START_PAUSED; start_flags |= VIR_QEMU_PROCESS_START_PAUSED;
@ -16656,9 +16651,9 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
} }
break; break;
case VIR_DOMAIN_SHUTDOWN: case VIR_DOMAIN_SNAPSHOT_SHUTDOWN:
case VIR_DOMAIN_SHUTOFF: case VIR_DOMAIN_SNAPSHOT_SHUTOFF:
case VIR_DOMAIN_CRASHED: case VIR_DOMAIN_SNAPSHOT_CRASHED:
/* Transitions 1, 4, 7 */ /* Transitions 1, 4, 7 */
/* Newer qemu -loadvm refuses to revert to the state of a snapshot /* Newer qemu -loadvm refuses to revert to the state of a snapshot
* created by qemu-img snapshot -c. If the domain is running, we * created by qemu-img snapshot -c. If the domain is running, we
@ -16715,15 +16710,17 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
} }
break; break;
case VIR_DOMAIN_PMSUSPENDED: case VIR_DOMAIN_SNAPSHOT_PMSUSPENDED:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("qemu doesn't support reversion of snapshot taken in " _("qemu doesn't support reversion of snapshot taken in "
"PMSUSPENDED state")); "PMSUSPENDED state"));
goto endjob; goto endjob;
case VIR_DOMAIN_NOSTATE: case VIR_DOMAIN_SNAPSHOT_DISK_SNAPSHOT:
case VIR_DOMAIN_BLOCKED: /* Rejected earlier as an external snapshot */
case VIR_DOMAIN_LAST: case VIR_DOMAIN_SNAPSHOT_NOSTATE:
case VIR_DOMAIN_SNAPSHOT_BLOCKED:
case VIR_DOMAIN_SNAPSHOT_LAST:
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Invalid target domain state '%s'. Refusing " _("Invalid target domain state '%s'. Refusing "
"snapshot reversion"), "snapshot reversion"),