forked from pool/libvirt
a48acb127a
- qemu: Support setting OEM strings in SMBIOS 68eed56b-conf-smbios-oem-strings.patch, 76977061-qemu-smbios-oem-strings.patch FATE#323624 - libxl: resume lock process after failed migration 0c710a37-libxl-resume-lock-on-mig-failure.patch bsc#1076861 - qemu hook: Change shebang to /usr/bin/python3 - spec: Require python lxml in daemon-hooks subpackage OBS-URL: https://build.opensuse.org/request/show/569996 OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=665
53 lines
2.0 KiB
Diff
53 lines
2.0 KiB
Diff
commit 0c710a37ea265dc7dfa0ebcebf1e21e4c6b2ea21
|
|
Author: Jim Fehlig <jfehlig@suse.com>
|
|
Date: Wed Jan 24 14:23:04 2018 -0700
|
|
|
|
libxl: resume lock process after failed migration
|
|
|
|
During migration, the lock process is paused in the perform phase
|
|
but not resumed if there is a subsequent failure, leaving the locked
|
|
resource unprotected.
|
|
|
|
The perform phase itself can fail, in which case the lock process
|
|
should be resumed before returning from perform. The finish phase
|
|
could also fail on the destination host, in which case the migration
|
|
is canceled in the confirm phase and the VM is resumed. The lock
|
|
process needs to be resumed there as well.
|
|
|
|
Signed-off-by: Jim Fehlig <jfehlig@suse.com>
|
|
|
|
Index: libvirt-4.0.0/src/libxl/libxl_migration.c
|
|
===================================================================
|
|
--- libvirt-4.0.0.orig/src/libxl/libxl_migration.c
|
|
+++ libvirt-4.0.0/src/libxl/libxl_migration.c
|
|
@@ -1238,6 +1238,12 @@ libxlDomainMigrationPerform(libxlDriverP
|
|
ret = libxlDoMigrateSend(driver, vm, flags, sockfd);
|
|
virObjectLock(vm);
|
|
|
|
+ if (ret < 0)
|
|
+ virDomainLockProcessResume(driver->lockManager,
|
|
+ "xen:///system",
|
|
+ vm,
|
|
+ priv->lockState);
|
|
+
|
|
cleanup:
|
|
VIR_FORCE_CLOSE(sockfd);
|
|
virURIFree(uri);
|
|
@@ -1349,10 +1355,16 @@ libxlDomainMigrationConfirm(libxlDriverP
|
|
int cancelled)
|
|
{
|
|
libxlDriverConfigPtr cfg = libxlDriverConfigGet(driver);
|
|
+ libxlDomainObjPrivatePtr priv = vm->privateData;
|
|
virObjectEventPtr event = NULL;
|
|
int ret = -1;
|
|
|
|
if (cancelled) {
|
|
+ /* Resume lock process that was paused in MigrationPerform */
|
|
+ virDomainLockProcessResume(driver->lockManager,
|
|
+ "xen:///system",
|
|
+ vm,
|
|
+ priv->lockState);
|
|
if (libxl_domain_resume(cfg->ctx, vm->def->id, 1, 0) == 0) {
|
|
ret = 0;
|
|
} else {
|