diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 66f1eda1ab9cb6413798809bea59f08efdfb1dd0..accfc77ced583bbb2adc364f824d966dcb0048f1 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -547,6 +547,7 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, virDomainObjPtr vm, virDomainDiskDefPtr disk) { + size_t i; qemuDomainObjPrivatePtr priv = vm->privateData; char *drivestr = NULL; char *devstr = NULL; @@ -564,6 +565,18 @@ qemuDomainAttachSCSIDisk(virConnectPtr conn, goto error; } + /* Let's make sure the disk has a controller defined and loaded before + * trying to add it. The controller used by the disk must exist before a + * qemu command line string is generated. + * + * Ensure that the given controller and all controllers with a smaller index + * exist; there must not be any missing index in between. + */ + for (i = 0; i <= disk->info.addr.drive.controller; i++) { + if (!qemuDomainFindOrCreateSCSIDiskController(driver, vm, i)) + goto error; + } + if (qemuAssignDeviceDiskAlias(vm->def, disk, priv->qemuCaps) < 0) goto error;