qemu: SCSI hostdev hot-plug: Fix automatic creation of SCSI controllers

Ensure that the given controller and all controllers with a smaller
index exist; there must not be any missing index in between.

Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com>
Reviewed-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
Signed-off-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com>
This commit is contained in:
Marc Hartmayer 2016-06-27 16:43:47 +02:00 committed by Peter Krempa
parent 58d07db9b0
commit 12ec22b68b
1 changed files with 12 additions and 4 deletions

View File

@ -1866,10 +1866,10 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn,
virDomainObjPtr vm,
virDomainHostdevDefPtr hostdev)
{
size_t i;
int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
virErrorPtr orig_err;
virDomainControllerDefPtr cont = NULL;
char *devstr = NULL;
char *drvstr = NULL;
bool teardowncgroup = false;
@ -1881,9 +1881,17 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn,
return -1;
}
cont = qemuDomainFindOrCreateSCSIDiskController(driver, vm, hostdev->info->addr.drive.controller);
if (!cont)
return -1;
/* 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 <= hostdev->info->addr.drive.controller; i++) {
if (!qemuDomainFindOrCreateSCSIDiskController(driver, vm, i))
return -1;
}
if (qemuHostdevPrepareSCSIDevices(driver, vm->def->name,
&hostdev, 1)) {