vz: move disks checks to device post parse

And reformat so that we don't have lengthy lines. Also simplify
some checks.

Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
This commit is contained in:
Nikolay Shirokovskiy 2016-04-20 17:05:33 +03:00 committed by Maxim Nestratov
parent 511f6ab5ba
commit 91ee31d19e
2 changed files with 68 additions and 47 deletions

View File

@ -3114,7 +3114,6 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
virDomainDeviceDriveAddressPtr drive; virDomainDeviceDriveAddressPtr drive;
PRL_DEVICE_TYPE devType; PRL_DEVICE_TYPE devType;
PRL_CLUSTERED_DEVICE_SUBTYPE scsiModel; PRL_CLUSTERED_DEVICE_SUBTYPE scsiModel;
char *dst = NULL;
const char *path = disk->src->path ? : ""; const char *path = disk->src->path ? : "";
if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK) if (disk->device == VIR_DOMAIN_DISK_DEVICE_DISK)
@ -3152,54 +3151,19 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
prlsdkCheckRetGoto(pret, cleanup); prlsdkCheckRetGoto(pret, cleanup);
drive = &disk->info.addr.drive; 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) { switch (disk->bus) {
case VIR_DOMAIN_DISK_BUS_IDE: 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; sdkbus = PMS_IDE_DEVICE;
idx = 2 * drive->bus + drive->unit; idx = 2 * drive->bus + drive->unit;
dst = virIndexToDiskName(idx, "hd");
break; break;
case VIR_DOMAIN_DISK_BUS_SCSI: 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; sdkbus = PMS_SCSI_DEVICE;
idx = drive->unit; idx = drive->unit;
dst = virIndexToDiskName(idx, "sd");
break; break;
case VIR_DOMAIN_DISK_BUS_SATA: 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; sdkbus = PMS_SATA_DEVICE;
idx = drive->unit; idx = drive->unit;
dst = virIndexToDiskName(idx, "sd");
break; break;
default: default:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
@ -3208,16 +3172,6 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
goto cleanup; 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 (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) {
if (vzGetDefaultSCSIModel(driver, &scsiModel) < 0) if (vzGetDefaultSCSIModel(driver, &scsiModel) < 0)
goto cleanup; goto cleanup;
@ -3234,7 +3188,6 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
return 0; return 0;
cleanup: cleanup:
PrlHandle_Free(sdkdisk); PrlHandle_Free(sdkdisk);
VIR_FREE(dst);
return ret; return ret;
} }

View File

@ -256,6 +256,71 @@ vzInitVersion(vzDriverPtr driver)
return ret; return ret;
} }
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 static int
vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk) vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk)
{ {
@ -375,6 +440,9 @@ vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk)
} }
if (vzCheckDiskAddressDriveUnsupportedParams(disk) < 0)
return -1;
return 0; return 0;
} }