And reformat so that we don't have lengthy lines. Also simplify
some checks.
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy(a)virtuozzo.com>
---
src/vz/vz_sdk.c | 47 --------------------------------------
src/vz/vz_utils.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 68 insertions(+), 47 deletions(-)
diff --git a/src/vz/vz_sdk.c b/src/vz/vz_sdk.c
index 7e36cb0..5a83586 100644
--- a/src/vz/vz_sdk.c
+++ b/src/vz/vz_sdk.c
@@ -3127,7 +3127,6 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
virDomainDeviceDriveAddressPtr drive;
PRL_DEVICE_TYPE devType;
PRL_CLUSTERED_DEVICE_SUBTYPE scsiModel;
- char *dst = NULL;
const char *path = disk->src->path ? : "";
if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK)
@@ -3165,54 +3164,19 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
prlsdkCheckRetGoto(pret, cleanup);
drive = &disk->info.addr.drive;
- if (drive->controller > 0) {
- /* We have only one controller of each type */
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Invalid drive "
- "address of disk %s, vz driver
supports "
- "only one controller."),
disk->dst);
- goto cleanup;
- }
-
- if (drive->target > 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Invalid drive "
- "address of disk %s, vz driver
supports "
- "only target 0."),
disk->dst);
- goto cleanup;
- }
switch (disk->bus) {
case VIR_DOMAIN_DISK_BUS_IDE:
- if (drive->unit > 1) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Invalid drive "
- "address of disk %s, vz
driver supports "
- "only units 0-1 for IDE
bus."), disk->dst);
- goto cleanup;
- }
sdkbus = PMS_IDE_DEVICE;
idx = 2 * drive->bus + drive->unit;
- dst = virIndexToDiskName(idx, "hd");
break;
case VIR_DOMAIN_DISK_BUS_SCSI:
- if (drive->bus > 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Invalid drive "
- "address of disk %s, vz
driver supports "
- "only bus 0 for SCSI
bus."), disk->dst);
- goto cleanup;
- }
sdkbus = PMS_SCSI_DEVICE;
idx = drive->unit;
- dst = virIndexToDiskName(idx, "sd");
break;
case VIR_DOMAIN_DISK_BUS_SATA:
- if (drive->bus > 0) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Invalid drive "
- "address of disk %s, vz
driver supports "
- "only bus 0 for SATA
bus."), disk->dst);
- goto cleanup;
- }
sdkbus = PMS_SATA_DEVICE;
idx = drive->unit;
- dst = virIndexToDiskName(idx, "sd");
break;
default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@@ -3221,16 +3185,6 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
goto cleanup;
}
- if (!dst)
- goto cleanup;
-
- if (STRNEQ(dst, disk->dst)) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("Invalid drive "
- "address of disk %s, vz driver
supports "
- "only defaults address to
logical device name."), disk->dst);
- goto cleanup;
- }
-
if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) {
if (vzGetDefaultSCSIModel(driver, &scsiModel) < 0)
goto cleanup;
@@ -3247,7 +3201,6 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
return 0;
cleanup:
PrlHandle_Free(sdkdisk);
- VIR_FREE(dst);
return ret;
}
diff --git a/src/vz/vz_utils.c b/src/vz/vz_utils.c
index db0ad82..5c53e79 100644
--- a/src/vz/vz_utils.c
+++ b/src/vz/vz_utils.c
@@ -265,6 +265,71 @@ vzInitVersion(vzDriverPtr driver)
}
static int
+vzCheckDiskAddressDriveUnsupportedParams(virDomainDiskDefPtr disk)
+{
+ virDomainDeviceDriveAddressPtr drive = &disk->info.addr.drive;
+ int devIdx, busIdx;
+
+ if (drive->controller > 0) {
+ /* We have only one controller of each type */
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Invalid drive address of disk %s, vz driver "
+ "supports only one controller."), disk->dst);
+ return -1;
+ }
+
+ if (drive->target > 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Invalid drive address of disk %s, vz driver "
+ "supports only target 0."), disk->dst);
+ return -1;
+ }
+
+ switch (disk->bus) {
+ case VIR_DOMAIN_DISK_BUS_IDE:
+ if (drive->unit > 1) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Invalid drive address of disk %s, vz driver "
+ "supports only units 0-1 for IDE bus."),
+ disk->dst);
+ return -1;
+ }
+ break;
+ case VIR_DOMAIN_DISK_BUS_SCSI:
+ case VIR_DOMAIN_DISK_BUS_SATA:
+ if (drive->bus > 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Invalid drive address of disk %s, vz driver "
+ "supports only bus 0 for SATA and SCSI bus."),
+ disk->dst);
+ return -1;
+ }
+ break;
+ default:
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("Specified disk bus is not supported by vz
driver."));
+ return -1;
+ }
+
+ if (virDiskNameToBusDeviceIndex(disk, &busIdx, &devIdx) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot convert disk '%s' to bus/device
index"),
+ disk->dst);
+ return -1;
+ }
+
+ if (busIdx != drive->bus || devIdx != drive->unit) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Invalid drive address of disk %s, vz driver "
+ "does not support non default name mappings."),
+ disk->dst);
+ return -1;
+ }
+
+ return 0;
+}
+
+static int
vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk)
{
if (disk->device != VIR_DOMAIN_DISK_DEVICE_DISK &&
@@ -383,6 +448,9 @@ vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk)
}
+ if (vzCheckDiskAddressDriveUnsupportedParams(disk) < 0)
+ return -1;
+
return 0;
}
--
1.8.3.1