File 60b4fd90-libxl-rm-vm-finish-phase.patch of Package libvirt.11329

commit 60b4fd90213135be0e471756d3d95c68eb3e8f59
Author: Jim Fehlig <jfehlig@suse.com>
Date:   Fri Aug 24 14:55:03 2018 -0600

    libxl: migration: defer removing VM until finish phase
    
    If for any reason the restore of a VM fails on the destination host
    in a migration operation, the VM is removed (if not persistent) from
    the virDomainObjList, meaning it is no longer available for additional
    cleanup or processing in the finish phase. Defer removing the VM from
    the virDomainObjList until the finish phase, which already contains
    logic to remove the VM.
    
    Signed-off-by: Jim Fehlig <jfehlig@suse.com>
    ACKed-by: Michal Privoznik <mprivozn@redhat.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
@@ -265,8 +265,6 @@ libxlDoMigrateReceive(void *opaque)
     libxlDriverPrivatePtr driver = args->conn->privateData;
     int recvfd = args->recvfd;
     size_t i;
-    int ret;
-    bool remove_dom = 0;
 
     virObjectRef(vm);
     virObjectLock(vm);
@@ -276,12 +274,10 @@ libxlDoMigrateReceive(void *opaque)
     /*
      * Always start the domain paused.  If needed, unpause in the
      * finish phase, after transfer of the domain is complete.
+     * Errors and cleanup are also handled in the finish phase.
      */
-    ret = libxlDomainStartRestore(driver, vm, true, recvfd,
-                                  args->migcookie->xenMigStreamVer);
-
-    if (ret < 0 && !vm->persistent)
-        remove_dom = true;
+    libxlDomainStartRestore(driver, vm, true, recvfd,
+                            args->migcookie->xenMigStreamVer);
 
     /* Remove all listen socks from event handler, and close them. */
     for (i = 0; i < nsocks; i++) {
@@ -297,10 +293,6 @@ libxlDoMigrateReceive(void *opaque)
     libxlDomainObjEndJob(driver, vm);
 
  cleanup:
-    if (remove_dom) {
-        virDomainObjListRemove(driver->domains, vm);
-        virObjectLock(vm);
-    }
     virDomainObjEndAPI(&vm);
 }
 
openSUSE Build Service is sponsored by