mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 21:34:54 +03:00
qemu: Don't use asyncJob after stop during snapshot revert
https://bugzilla.redhat.com/show_bug.cgi?id=1591628 Attempting to use the FORCE flag for snapshot-revert was resulting in failures because qemuProcessStart and qemuProcessStartCPUs were using QEMU_ASYNC_JOB_START after a qemuProcessStop resulting in an error when entering the monitor: error: internal error: unexpected async job 6 type expected 0 So create a local @jobType, initialize to QEMU_ASYNC_JOB_START, and change to QEMU_ASYNC_JOB_NONE if we end up in the --force path where the qemuProcessStop is run before a Start and StartCPUs. Signed-off-by: John Ferlan <jferlan@redhat.com> ACKed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
e5d7064be0
commit
0c4408c832
@ -16037,6 +16037,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
|||||||
qemuDomainSaveCookiePtr cookie;
|
qemuDomainSaveCookiePtr cookie;
|
||||||
virCPUDefPtr origCPU = NULL;
|
virCPUDefPtr origCPU = NULL;
|
||||||
unsigned int start_flags = VIR_QEMU_PROCESS_START_GEN_VMID;
|
unsigned int start_flags = VIR_QEMU_PROCESS_START_GEN_VMID;
|
||||||
|
qemuDomainAsyncJob jobType = QEMU_ASYNC_JOB_START;
|
||||||
|
|
||||||
virCheckFlags(VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
|
virCheckFlags(VIR_DOMAIN_SNAPSHOT_REVERT_RUNNING |
|
||||||
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED |
|
VIR_DOMAIN_SNAPSHOT_REVERT_PAUSED |
|
||||||
@ -16212,6 +16213,9 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
|||||||
VIR_DOMAIN_EVENT_STOPPED,
|
VIR_DOMAIN_EVENT_STOPPED,
|
||||||
detail);
|
detail);
|
||||||
virObjectEventStateQueue(driver->domainEventState, event);
|
virObjectEventStateQueue(driver->domainEventState, event);
|
||||||
|
/* Start after stop won't be an async start job, so
|
||||||
|
* reset to none */
|
||||||
|
jobType = QEMU_ASYNC_JOB_NONE;
|
||||||
goto load;
|
goto load;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -16270,7 +16274,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
|||||||
|
|
||||||
rc = qemuProcessStart(snapshot->domain->conn, driver, vm,
|
rc = qemuProcessStart(snapshot->domain->conn, driver, vm,
|
||||||
cookie ? cookie->cpu : NULL,
|
cookie ? cookie->cpu : NULL,
|
||||||
QEMU_ASYNC_JOB_START, NULL, -1, NULL, snap,
|
jobType, NULL, -1, NULL, snap,
|
||||||
VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
|
VIR_NETDEV_VPORT_PROFILE_OP_CREATE,
|
||||||
start_flags);
|
start_flags);
|
||||||
virDomainAuditStart(vm, "from-snapshot", rc >= 0);
|
virDomainAuditStart(vm, "from-snapshot", rc >= 0);
|
||||||
@ -16305,7 +16309,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
|
|||||||
}
|
}
|
||||||
rc = qemuProcessStartCPUs(driver, vm,
|
rc = qemuProcessStartCPUs(driver, vm,
|
||||||
VIR_DOMAIN_RUNNING_FROM_SNAPSHOT,
|
VIR_DOMAIN_RUNNING_FROM_SNAPSHOT,
|
||||||
QEMU_ASYNC_JOB_START);
|
jobType);
|
||||||
if (rc < 0)
|
if (rc < 0)
|
||||||
goto endjob;
|
goto endjob;
|
||||||
virObjectUnref(event);
|
virObjectUnref(event);
|
||||||
|
Loading…
Reference in New Issue
Block a user