提交 f0a3fe1b 编写于 作者: J Jiri Denemark

qemu: Use qemuDomainCheckABIStability where needed

Most places which want to check ABI stability for an active domain need
to call this API rather than the original
qemuDomainDefCheckABIStability. The only exception is in snapshots where
we need to decide what to do depending on the saved image data.

https://bugzilla.redhat.com/show_bug.cgi?id=1460952Signed-off-by: NJiri Denemark <jdenemar@redhat.com>
Reviewed-by: NPavel Hrdina <phrdina@redhat.com>
上级 063b2b87
...@@ -3340,7 +3340,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom, ...@@ -3340,7 +3340,7 @@ qemuDomainSaveInternal(virQEMUDriverPtr driver, virDomainPtr dom,
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) { VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) {
goto endjob; goto endjob;
} }
if (!qemuDomainDefCheckABIStability(driver, vm->def, def)) { if (!qemuDomainCheckABIStability(driver, vm, def)) {
virDomainDefFree(def); virDomainDefFree(def);
goto endjob; goto endjob;
} }
...@@ -15412,39 +15412,50 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot, ...@@ -15412,39 +15412,50 @@ qemuDomainRevertToSnapshot(virDomainSnapshotPtr snapshot,
* to have finer control. */ * to have finer control. */
if (virDomainObjIsActive(vm)) { if (virDomainObjIsActive(vm)) {
/* Transitions 5, 6, 8, 9 */ /* Transitions 5, 6, 8, 9 */
/* Replace the CPU in config and put the original one in priv
* once we're done.
*/
if (cookie && cookie->cpu && config->cpu) {
origCPU = config->cpu;
if (!(config->cpu = virCPUDefCopy(cookie->cpu)))
goto endjob;
}
/* Check for ABI compatibility. We need to do this check against /* Check for ABI compatibility. We need to do this check against
* the migratable XML or it will always fail otherwise */ * the migratable XML or it will always fail otherwise */
if (config && if (config) {
!qemuDomainDefCheckABIStability(driver, vm->def, config)) { bool compatible;
virErrorPtr err = virGetLastError();
/* Replace the CPU in config and put the original one in priv
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) { * once we're done. When we have the updated CPU def in the
/* Re-spawn error using correct category. */ * cookie, we don't want to replace the CPU in migratable def
if (err->code == VIR_ERR_CONFIG_UNSUPPORTED) * when doing ABI checks to make sure the current CPU exactly
virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, "%s", * matches the one used at the time the snapshot was taken.
err->str2); */
goto endjob; if (cookie && cookie->cpu && config->cpu) {
origCPU = config->cpu;
if (!(config->cpu = virCPUDefCopy(cookie->cpu)))
goto endjob;
compatible = qemuDomainDefCheckABIStability(driver, vm->def,
config);
} else {
compatible = qemuDomainCheckABIStability(driver, vm, config);
}
if (!compatible) {
virErrorPtr err = virGetLastError();
if (!(flags & VIR_DOMAIN_SNAPSHOT_REVERT_FORCE)) {
/* Re-spawn error using correct category. */
if (err->code == VIR_ERR_CONFIG_UNSUPPORTED)
virReportError(VIR_ERR_SNAPSHOT_REVERT_RISKY, "%s",
err->str2);
goto endjob;
}
virResetError(err);
qemuProcessStop(driver, vm,
VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT,
QEMU_ASYNC_JOB_START, 0);
virDomainAuditStop(vm, "from-snapshot");
detail = VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT;
event = virDomainEventLifecycleNewFromObj(vm,
VIR_DOMAIN_EVENT_STOPPED,
detail);
qemuDomainEventQueue(driver, event);
goto load;
} }
virResetError(err);
qemuProcessStop(driver, vm,
VIR_DOMAIN_SHUTOFF_FROM_SNAPSHOT,
QEMU_ASYNC_JOB_START, 0);
virDomainAuditStop(vm, "from-snapshot");
detail = VIR_DOMAIN_EVENT_STOPPED_FROM_SNAPSHOT;
event = virDomainEventLifecycleNewFromObj(vm,
VIR_DOMAIN_EVENT_STOPPED,
detail);
qemuDomainEventQueue(driver, event);
goto load;
} }
priv = vm->privateData; priv = vm->privateData;
......
...@@ -2059,7 +2059,7 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver, ...@@ -2059,7 +2059,7 @@ qemuMigrationBeginPhase(virQEMUDriverPtr driver,
VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE))) VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE)))
goto cleanup; goto cleanup;
if (!qemuDomainDefCheckABIStability(driver, vm->def, def)) if (!qemuDomainCheckABIStability(driver, vm, def))
goto cleanup; goto cleanup;
rv = qemuDomainDefFormatLive(driver, def, NULL, false, true); rv = qemuDomainDefFormatLive(driver, def, NULL, false, true);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册