SHA256
1
0
forked from pool/libvirt
libvirt/0c710a37-libxl-resume-lock-on-mig-failure.patch
James Fehlig a48acb127a Accepting request 569996 from home:jfehlig:branches:Virtualization
- 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
2018-01-26 17:16:35 +00:00

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 {