From 627b6b0f6814ac686683e620c10228f89a918e15 Mon Sep 17 00:00:00 2001 From: Marc Hartmayer Date: Mon, 27 Jun 2016 16:43:47 +0200 Subject: [PATCH] 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 Reviewed-by: Bjoern Walk Signed-off-by: Marc Hartmayer (cherry picked from commit 12ec22b68befce0ae8020635e7fd71d783b1d716) Conflicts: src/qemu/qemu_hotplug.c: - context of the first hunk changed --- src/qemu/qemu_hotplug.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index accfc77ced..0ee98b3532 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1918,9 +1918,9 @@ qemuDomainAttachHostSCSIDevice(virConnectPtr conn, virDomainObjPtr vm, virDomainHostdevDefPtr hostdev) { + size_t i; int ret = -1; qemuDomainObjPrivatePtr priv = vm->privateData; - virDomainControllerDefPtr cont = NULL; char *devstr = NULL; char *drvstr = NULL; bool teardowncgroup = false; @@ -1933,9 +1933,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)) {