mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: migration: Preserve error across qemuDomainSetMaxMemLock() on error paths
When a VM terminates itself while it's being migrated in running state libvirt would report wrong error: error: cannot get locked memory limit of process 2502057: No such file or directory rather than the proper error: error: operation failed: domain is not running Remember the error on error paths in qemuMigrationSrcConfirmPhase and qemuMigrationSrcPerformPhase. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
e00a58c10a
commit
e6b94cba7e
@ -4015,8 +4015,6 @@ qemuMigrationSrcConfirmPhase(virQEMUDriver *driver,
|
|||||||
qemuMigrationSrcNBDCopyCancel(vm, false,
|
qemuMigrationSrcNBDCopyCancel(vm, false,
|
||||||
VIR_ASYNC_JOB_MIGRATION_OUT, NULL);
|
VIR_ASYNC_JOB_MIGRATION_OUT, NULL);
|
||||||
|
|
||||||
virErrorRestore(&orig_err);
|
|
||||||
|
|
||||||
if (virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
|
if (virDomainObjGetState(vm, &reason) == VIR_DOMAIN_PAUSED &&
|
||||||
reason == VIR_DOMAIN_PAUSED_POSTCOPY) {
|
reason == VIR_DOMAIN_PAUSED_POSTCOPY) {
|
||||||
qemuMigrationSrcPostcopyFailed(vm);
|
qemuMigrationSrcPostcopyFailed(vm);
|
||||||
@ -4029,6 +4027,7 @@ qemuMigrationSrcConfirmPhase(virQEMUDriver *driver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
qemuDomainSaveStatus(vm);
|
qemuDomainSaveStatus(vm);
|
||||||
|
virErrorRestore(&orig_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -6230,11 +6229,15 @@ qemuMigrationSrcPerformPhase(virQEMUDriver *driver,
|
|||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if (ret < 0 && !virDomainObjIsFailedPostcopy(vm, vm->job)) {
|
if (ret < 0 && !virDomainObjIsFailedPostcopy(vm, vm->job)) {
|
||||||
|
virErrorPtr orig_err;
|
||||||
|
virErrorPreserveLast(&orig_err);
|
||||||
|
|
||||||
qemuMigrationSrcRestoreDomainState(driver, vm);
|
qemuMigrationSrcRestoreDomainState(driver, vm);
|
||||||
qemuMigrationParamsReset(vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
qemuMigrationParamsReset(vm, VIR_ASYNC_JOB_MIGRATION_OUT,
|
||||||
jobPriv->migParams, vm->job->apiFlags);
|
jobPriv->migParams, vm->job->apiFlags);
|
||||||
qemuDomainSetMaxMemLock(vm, 0, &priv->preMigrationMemlock);
|
qemuDomainSetMaxMemLock(vm, 0, &priv->preMigrationMemlock);
|
||||||
qemuMigrationJobFinish(vm);
|
qemuMigrationJobFinish(vm);
|
||||||
|
virErrorRestore(&orig_err);
|
||||||
} else {
|
} else {
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
ignore_value(qemuMigrationJobSetPhase(vm, QEMU_MIGRATION_PHASE_POSTCOPY_FAILED));
|
||||||
|
Loading…
Reference in New Issue
Block a user