diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 1795e1b1c4e3e07a98e4d36f97714b50695bb8ad..d65dca506baec6c0876dc32a3afd7f3248c996d1 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -263,9 +263,6 @@ vzDomainDefPostParse(virDomainDefPtr def, if (vzDomainDefAddDefaultInputDevices(def) < 0) return -1; - if (vzCheckUnsupportedDisks(def, opaque) < 0) - return -1; - if (vzCheckUnsupportedControllers(def, opaque) < 0) return -1; @@ -279,19 +276,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 db23b726ce92d0e2ddada72bfa6f14bf11ab73ed..4100b968c33ce87a2d2ac86b944912261cc9220b 100644 --- a/src/vz/vz_utils.c +++ b/src/vz/vz_utils.c @@ -379,51 +379,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 a65ad21290e9bb0c534dac32d70d9a30e8947475..5c6f770c82f83bd10859374e6b1d56b6efaa0359 100644 --- a/src/vz/vz_utils.h +++ b/src/vz/vz_utils.h @@ -121,8 +121,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);