When qemuDomainFindOrCreateSCSIDiskController adds a controller,
let's use the same model as a currently found controller under the
assumption that the reason to add the controller in hotplug is
because virDomainHostdevAssignAddress determined that there were
too many devices on the existing controller, but only assigned a
new controller index and did not add a new controller and we
desire to use the same controller model as any existing conroller
and not take a chance that qemuDomainSetSCSIControllerModel would
use a default that may be incompatible.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/qemu/qemu_hotplug.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 9317e134a..90d50e7b1 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -587,6 +587,7 @@ qemuDomainFindOrCreateSCSIDiskController(virQEMUDriverPtr driver,
{
size_t i;
virDomainControllerDefPtr cont;
+ virDomainControllerModelSCSI model = -1;
for (i = 0; i < vm->def->ncontrollers; i++) {
cont = vm->def->controllers[i];
@@ -596,6 +597,12 @@ qemuDomainFindOrCreateSCSIDiskController(virQEMUDriverPtr driver,
if (cont->idx == controller)
return cont;
+
+ /* Save off the model - if we end up creating a controller it's
+ * because the user didn't provide one and we need to automagically
+ * create one because the existing one is full - so let's be sure
+ * to keep the same model in that case. */
+ model = cont->model;
}
/* No SCSI controller present, for backward compatibility we
@@ -604,11 +611,10 @@ qemuDomainFindOrCreateSCSIDiskController(virQEMUDriverPtr driver,
return NULL;
cont->type = VIR_DOMAIN_CONTROLLER_TYPE_SCSI;
cont->idx = controller;
- cont->model = -1;
+ cont->model = model;
- VIR_INFO("No SCSI controller present, hotplugging one");
- if (qemuDomainAttachControllerDevice(driver,
- vm, cont) < 0) {
+ VIR_INFO("No SCSI controller present, hotplugging one model=%d", model);
+ if (qemuDomainAttachControllerDevice(driver, vm, cont) < 0) {
VIR_FREE(cont);
return NULL;
}
--
2.13.6