]> xenbits.xensource.com Git - libvirt.git/commitdiff
vz: add validation callbacks
authorMikhail Feoktistov <mfeoktistov@virtuozzo.com>
Thu, 18 Aug 2016 11:43:09 +0000 (07:43 -0400)
committerMaxim Nestratov <mnestratov@virtuozzo.com>
Thu, 18 Aug 2016 17:37:09 +0000 (20:37 +0300)
This patch fixes a bug which occurs when we check a bus and unit number
for a new attached disk. We should do this check in ValidadionCallback,
not in PostParse callback. Because in PostParse we have not initialized
disk->info.addr.drive struct yet.
Move part of code from domainPostParseCallback to domainValidateCallback
and part from devicesPostParseCallback to deviceValidateCallback.
PostParse callbacks are for modification data.
ValidateCallbacks are only for checks.

src/vz/vz_driver.c
src/vz/vz_utils.c
src/vz/vz_utils.h

index 26b14a21f36229566db7686b9ced79428013c2ac..e7254cb50d9039483b3ed273bc551d980871b431 100644 (file)
@@ -232,6 +232,7 @@ vzConnectGetCapabilities(virConnectPtr conn)
     xml = virCapabilitiesFormatXML(privconn->driver->caps);
     return xml;
 }
+
 static int
 vzDomainDefAddDefaultInputDevices(virDomainDefPtr def)
 {
@@ -258,11 +259,19 @@ static int
 vzDomainDefPostParse(virDomainDefPtr def,
                      virCapsPtr caps ATTRIBUTE_UNUSED,
                      unsigned int parseFlags ATTRIBUTE_UNUSED,
-                     void *opaque)
+                     void *opaque ATTRIBUTE_UNUSED)
 {
     if (vzDomainDefAddDefaultInputDevices(def) < 0)
         return -1;
 
+    return 0;
+}
+
+static int
+vzDomainDefValidate(const virDomainDef *def,
+                    virCapsPtr caps ATTRIBUTE_UNUSED,
+                    void *opaque)
+{
     if (vzCheckUnsupportedControllers(def, opaque) < 0)
         return -1;
 
@@ -284,6 +293,14 @@ vzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev,
         VIR_STRDUP(dev->data.net->model, "e1000") < 0)
         return -1;
 
+    return 0;
+}
+
+static int
+vzDomainDeviceDefValidate(const virDomainDeviceDef *dev,
+                          const virDomainDef *def,
+                          void *opaque ATTRIBUTE_UNUSED)
+{
     if (dev->type == VIR_DOMAIN_DEVICE_DISK)
         return vzCheckUnsupportedDisk(def, dev->data.disk, opaque);
     else if (dev->type == VIR_DOMAIN_DEVICE_GRAPHICS)
@@ -299,8 +316,10 @@ static virDomainXMLPrivateDataCallbacks vzDomainXMLPrivateDataCallbacksPtr = {
 
 static virDomainDefParserConfig vzDomainDefParserConfig = {
     .macPrefix = {0x42, 0x1C, 0x00},
-    .devicesPostParseCallback = vzDomainDeviceDefPostParse,
     .domainPostParseCallback = vzDomainDefPostParse,
+    .devicesPostParseCallback = vzDomainDeviceDefPostParse,
+    .domainValidateCallback = vzDomainDefValidate,
+    .deviceValidateCallback = vzDomainDeviceDefValidate,
 };
 
 static vzDriverPtr
index 312355d9b64ea936115bcb303078d718ffb91e71..eaf09f2bc82e924ff34d3189ed76ae213a460cd4 100644 (file)
@@ -463,7 +463,7 @@ vzCheckUnsupportedDisk(const virDomainDef *def,
 }
 
 int
-vzCheckUnsupportedControllers(virDomainDefPtr def, vzCapabilitiesPtr vzCaps)
+vzCheckUnsupportedControllers(const virDomainDef *def, vzCapabilitiesPtr vzCaps)
 {
     size_t i, j;
     virDomainControllerDefPtr controller;
index d033f943a2f3d8eacdae2f5efe34fa8523651b62..4b407ec5447c21d9dd45c7c5f152a5f011d407aa 100644 (file)
@@ -137,7 +137,7 @@ vzCheckUnsupportedDisk(const virDomainDef *def,
                        virDomainDiskDefPtr disk,
                        vzCapabilitiesPtr vzCaps);
 int
-vzCheckUnsupportedControllers(virDomainDefPtr def,
+vzCheckUnsupportedControllers(const virDomainDef *def,
                               vzCapabilitiesPtr vzCaps);
 int
 vzGetDefaultSCSIModel(vzDriverPtr driver,