]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu_migration: Rearrange some checks in qemuMigrationSrcIsAllowed()
authorMichal Privoznik <mprivozn@redhat.com>
Thu, 20 Feb 2020 10:54:44 +0000 (11:54 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 20 Feb 2020 11:57:24 +0000 (12:57 +0100)
Firstly, the check for disk I/O error can be moved into 'if
(!offline)' section a few lines below.
Secondly, checks for vmstate and slirp should be moved under the
same section because they reflect live state of a domain. For
offline migration no QEMU is involved and thus these restrictions
are not valid.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_migration.c

index ceac81c9602b7f86baee2544d56d342f40fcbba2..a307c5ebe2bbff8d7db531f566f61899757ec4f6 100644 (file)
@@ -1185,43 +1185,25 @@ qemuMigrationSrcIsAllowed(virQEMUDriverPtr driver,
                            nsnapshots);
             return false;
         }
-
-        /* cancel migration if disk I/O error is emitted while migrating */
-        if (flags & VIR_MIGRATE_ABORT_ON_ERROR &&
-            !(flags & VIR_MIGRATE_OFFLINE) &&
-            virDomainObjGetState(vm, &pauseReason) == VIR_DOMAIN_PAUSED &&
-            pauseReason == VIR_DOMAIN_PAUSED_IOERROR) {
-            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                           _("cannot migrate domain with I/O error"));
-            return false;
-        }
-    }
-
-    if (virHashSize(priv->dbusVMStates) > 0 &&
-        !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
-        virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                       _("domain requires dbus-vmstate support"));
-        return false;
-    }
-
-    for (i = 0; i < vm->def->nnets; i++) {
-        virDomainNetDefPtr net = vm->def->nets[i];
-        qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
-
-        if (slirp && !qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_MIGRATE)) {
-            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
-                           _("a slirp-helper cannot be migrated"));
-            return false;
-        }
     }
 
     /* following checks don't make sense for offline migration */
     if (!(flags & VIR_MIGRATE_OFFLINE)) {
-        if (remote &&
-            qemuProcessAutoDestroyActive(driver, vm)) {
-            virReportError(VIR_ERR_OPERATION_INVALID,
-                           "%s", _("domain is marked for auto destroy"));
-            return false;
+        if (remote) {
+            /* cancel migration if disk I/O error is emitted while migrating */
+            if (flags & VIR_MIGRATE_ABORT_ON_ERROR &&
+                virDomainObjGetState(vm, &pauseReason) == VIR_DOMAIN_PAUSED &&
+                pauseReason == VIR_DOMAIN_PAUSED_IOERROR) {
+                virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                               _("cannot migrate domain with I/O error"));
+                return false;
+            }
+
+            if (qemuProcessAutoDestroyActive(driver, vm)) {
+                virReportError(VIR_ERR_OPERATION_INVALID,
+                               "%s", _("domain is marked for auto destroy"));
+                return false;
+            }
         }
 
 
@@ -1280,6 +1262,24 @@ qemuMigrationSrcIsAllowed(virQEMUDriverPtr driver,
                            _("migration with shmem device is not supported"));
             return false;
         }
+
+        if (virHashSize(priv->dbusVMStates) > 0 &&
+            !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) {
+            virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                           _("domain requires dbus-vmstate support"));
+            return false;
+        }
+
+        for (i = 0; i < vm->def->nnets; i++) {
+            virDomainNetDefPtr net = vm->def->nets[i];
+            qemuSlirpPtr slirp = QEMU_DOMAIN_NETWORK_PRIVATE(net)->slirp;
+
+            if (slirp && !qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_MIGRATE)) {
+                virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                               _("a slirp-helper cannot be migrated"));
+                return false;
+            }
+        }
     }
 
     return true;