[libvirt] [PATCH 05/18] vz: leverage disks parameters check on disks updates too

Nikolay Shirokovskiy nshirokovskiy at virtuozzo.com
Wed Apr 20 14:05:32 UTC 2016


This is as easy as moving disks checks from domain post
parse callback to device post parse callback.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy at virtuozzo.com>
---
 src/vz/vz_driver.c | 14 +++++-------
 src/vz/vz_utils.c  | 66 ++++++++++++++++++++++++++----------------------------
 src/vz/vz_utils.h  |  5 +++--
 3 files changed, 40 insertions(+), 45 deletions(-)

diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c
index 2778a9a..b007ad2 100644
--- a/src/vz/vz_driver.c
+++ b/src/vz/vz_driver.c
@@ -234,9 +234,6 @@ vzDomainDefPostParse(virDomainDefPtr def ATTRIBUTE_UNUSED,
                      unsigned int parseFlags ATTRIBUTE_UNUSED,
                      void *opaque)
 {
-    if (vzCheckUnsupportedDisks(def, opaque) < 0)
-        return -1;
-
     if (vzCheckUnsupportedControllers(def, opaque) < 0)
         return -1;
 
@@ -250,19 +247,18 @@ vzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
                            unsigned int parseFlags ATTRIBUTE_UNUSED,
                            void *opaque ATTRIBUTE_UNUSED)
 {
-    int ret = -1;
-
     if (dev->type == VIR_DOMAIN_DEVICE_NET &&
         (dev->data.net->type == VIR_DOMAIN_NET_TYPE_NETWORK ||
          dev->data.net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) &&
         !dev->data.net->model &&
         def->os.type == VIR_DOMAIN_OSTYPE_HVM &&
         VIR_STRDUP(dev->data.net->model, "e1000") < 0)
-        goto cleanup;
+        return -1;
 
-    ret = 0;
- cleanup:
-    return ret;
+    if (dev->type == VIR_DOMAIN_DEVICE_DISK)
+        return vzCheckUnsupportedDisk(def, dev->data.disk, opaque);
+
+    return 0;
 }
 
 
diff --git a/src/vz/vz_utils.c b/src/vz/vz_utils.c
index d9da1e7..db0ad82 100644
--- a/src/vz/vz_utils.c
+++ b/src/vz/vz_utils.c
@@ -387,51 +387,49 @@ vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk)
 }
 
 int
-vzCheckUnsupportedDisks(virDomainDefPtr def, vzCapabilitiesPtr vzCaps)
+vzCheckUnsupportedDisk(const virDomainDef *def,
+                       virDomainDiskDefPtr disk,
+                       vzCapabilitiesPtr vzCaps)
 {
-    size_t i, j;
-    virDomainDiskDefPtr disk;
+    size_t i;
     virStorageFileFormat diskFormat;
 
-    for (i = 0; i < def->ndisks; i++) {
-        disk = def->disks[i];
+    if (vzCheckDiskUnsupportedParams(disk) < 0)
+        return -1;
 
-        if (vzCheckDiskUnsupportedParams(disk) < 0)
-            return -1;
-
-        if (disk->src->type == VIR_STORAGE_TYPE_FILE) {
-            if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
-                if (IS_CT(def))
-                    diskFormat = vzCaps->ctDiskFormat;
-                else
-                    diskFormat = vzCaps->vmDiskFormat;
-            } else {
-                diskFormat = VIR_STORAGE_FILE_RAW;
-            }
+    if (disk->src->type == VIR_STORAGE_TYPE_FILE) {
+        if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) {
+            if (IS_CT(def))
+                diskFormat = vzCaps->ctDiskFormat;
+            else
+                diskFormat = vzCaps->vmDiskFormat;
         } else {
             diskFormat = VIR_STORAGE_FILE_RAW;
         }
+    } else {
+        diskFormat = VIR_STORAGE_FILE_RAW;
+    }
 
-        if (virDomainDiskGetFormat(disk) != VIR_STORAGE_FILE_NONE &&
-            virDomainDiskGetFormat(disk) != diskFormat) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("Unsupported format of disk %s"),
-                           disk->src->path);
-            return -1;
-        }
+    if (virDomainDiskGetFormat(disk) != VIR_STORAGE_FILE_NONE &&
+        virDomainDiskGetFormat(disk) != diskFormat) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Unsupported format of disk %s"),
+                       disk->src->path);
+        return -1;
+    }
 
-        for (j = 0; vzCaps->diskBuses[j] != VIR_DOMAIN_DISK_BUS_LAST; j++) {
-            if (disk->bus == vzCaps->diskBuses[j])
-                break;
-        }
+    for (i = 0; vzCaps->diskBuses[i] != VIR_DOMAIN_DISK_BUS_LAST; i++) {
+        if (disk->bus == vzCaps->diskBuses[i])
+            break;
+    }
 
-        if (vzCaps->diskBuses[j] == VIR_DOMAIN_DISK_BUS_LAST) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-                           _("Unsupported disk bus type %s"),
-                           virDomainDiskBusTypeToString(disk->bus));
-            return -1;
-        }
+    if (vzCaps->diskBuses[i] == VIR_DOMAIN_DISK_BUS_LAST) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Unsupported disk bus type %s"),
+                       virDomainDiskBusTypeToString(disk->bus));
+        return -1;
     }
+
     return 0;
 }
 
diff --git a/src/vz/vz_utils.h b/src/vz/vz_utils.h
index ee843d8..fc5f695 100644
--- a/src/vz/vz_utils.h
+++ b/src/vz/vz_utils.h
@@ -128,8 +128,9 @@ vzNewDomain(vzDriverPtr driver,
 int
 vzInitVersion(vzDriverPtr driver);
 int
-vzCheckUnsupportedDisks(virDomainDefPtr def,
-                        vzCapabilitiesPtr vzCaps);
+vzCheckUnsupportedDisk(const virDomainDef *def,
+                       virDomainDiskDefPtr disk,
+                       vzCapabilitiesPtr vzCaps);
 int
 vzCheckUnsupportedControllers(virDomainDefPtr def,
                               vzCapabilitiesPtr vzCaps);
-- 
1.8.3.1




More information about the libvir-list mailing list