This is as easy as moving disks checks from domain post
parse callback to device post parse callback.
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy(a)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