if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) {
if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI) {
- virDomainControllerDefPtr cont;
-
- cont = virDomainDeviceFindSCSIController(def, &disk->info);
- if (cont)
- controllerModel = cont->model;
-
- if ((qemuDomainSetSCSIControllerModel(def, qemuCaps,
- &controllerModel)) < 0)
+ controllerModel = qemuDomainFindSCSIControllerModel(def,
+ &disk->info,
+ qemuCaps);
+ if (controllerModel < 0)
return -1;
}
virQEMUCapsPtr qemuCaps)
{
virBuffer opt = VIR_BUFFER_INITIALIZER;
- virDomainControllerDefPtr cont;
const char *bus = virDomainDiskQEMUBusTypeToString(disk->bus);
const char *contAlias;
char *drivealias;
goto error;
}
- cont = virDomainDeviceFindSCSIController(def, &disk->info);
- if (cont)
- controllerModel = cont->model;
- if ((qemuDomainSetSCSIControllerModel(def, qemuCaps,
- &controllerModel)) < 0)
+ controllerModel = qemuDomainFindSCSIControllerModel(def, &disk->info,
+ qemuCaps);
+ if (controllerModel < 0)
goto error;
if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN) {
virQEMUCapsPtr qemuCaps)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
- virDomainControllerDefPtr cont;
int model = -1;
char *driveAlias;
const char *contAlias;
- cont = virDomainDeviceFindSCSIController(def, dev->info);
- if (cont)
- model = cont->model;
-
- if (qemuDomainSetSCSIControllerModel(def, qemuCaps, &model) < 0)
+ model = qemuDomainFindSCSIControllerModel(def, dev->info, qemuCaps);
+ if (model < 0)
goto error;
if (model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC) {
}
+/**
+ * @def: Domain definition
+ * @info: Domain device info
+ * @qemuCaps: QEMU capabilities
+ *
+ * Using the device info, find the controller related to the
+ * device by index and use that controller to return the model.
+ *
+ * Returns the model if found, -1 if not with an error message set
+ */
+int
+qemuDomainFindSCSIControllerModel(const virDomainDef *def,
+ virDomainDeviceInfoPtr info,
+ virQEMUCapsPtr qemuCaps)
+{
+ virDomainControllerDefPtr cont;
+ int model;
+
+ if (!(cont = virDomainDeviceFindSCSIController(def, info))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("unable to find a SCSI controller for idx=%d"),
+ info->addr.drive.controller);
+ return -1;
+ }
+
+ model = cont->model;
+ ignore_value(qemuDomainSetSCSIControllerModel(def, qemuCaps, &model));
+ return model;
+}
+
+
static int
qemuDomainAssignVirtioSerialAddresses(virDomainDefPtr def)
{
virQEMUCapsPtr qemuCaps,
int *model);
+int qemuDomainFindSCSIControllerModel(const virDomainDef *def,
+ virDomainDeviceInfoPtr info,
+ virQEMUCapsPtr qemuCaps);
+
int qemuDomainAssignAddresses(virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
virQEMUDriverPtr driver,