[PATCH 10/13] qemu: migration: Extract validation of disk target list

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The migration code is checking the disk list provided via
VIR_MIGRATE_PARAM_MIGRATE_DISKS against existing disks. Extract it to a
helper function as we'll be passing another list of disk targets soon.

Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx>
---
 src/qemu/qemu_migration.c | 52 +++++++++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 18 deletions(-)

diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index bb466bf1ee..a4efd8bfa7 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -2576,6 +2576,37 @@ qemuMigrationSrcBeginXML(virDomainObj *vm,
 }


+/**
+ * qemuMigrationSrcBeginPhaseValidateDiskTargetList:
+ * @vm: domain object
+ * @disks: NULL-terminated list of disk 'dst' strings to validate
+ *
+ * Validates that all members of the @disk list are valid disk targets.
+ */
+static int
+qemuMigrationSrcBeginPhaseValidateDiskTargetList(virDomainObj *vm,
+                                                 const char **disks)
+{
+    size_t i;
+    const char **d;
+
+    for (d = disks; *d; d++) {
+        for (i = 0; i < vm->def->ndisks; i++) {
+            if (STREQ(vm->def->disks[i]->dst, *d))
+                break;
+        }
+
+        if (i == vm->def->ndisks) {
+            virReportError(VIR_ERR_INVALID_ARG,
+                           _("disk target %1$s not found"), *d);
+            return -1;
+        }
+    }
+
+    return 0;
+}
+
+
 /* The caller is supposed to lock the vm and start a migration job. */
 static char *
 qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
@@ -2660,24 +2691,9 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
             return NULL;
         }

-        if (migrate_disks) {
-            size_t j;
-            const char **d;
-
-            /* Check user requested only known disk targets. */
-            for (d = migrate_disks; *d; d++) {
-                for (j = 0; j < vm->def->ndisks; j++) {
-                    if (STREQ(vm->def->disks[j]->dst, *d))
-                        break;
-                }
-
-                if (j == vm->def->ndisks) {
-                    virReportError(VIR_ERR_INVALID_ARG,
-                                   _("disk target %1$s not found"), *d);
-                    return NULL;
-                }
-            }
-        }
+        if (migrate_disks &&
+            qemuMigrationSrcBeginPhaseValidateDiskTargetList(vm, migrate_disks) < 0)
+            return NULL;

         priv->nbdPort = 0;

-- 
2.46.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux