提交 0c4408c8 编写于 作者: J John Ferlan

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: NJohn Ferlan <jferlan@redhat.com>
ACKed-by: NMichal Privoznik <mprivozn@redhat.com>
上级 e5d7064b
...@@ -16037,6 +16037,7 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册