99cbc7
From ff7bc70a5e5d7aaf354ce501653beb82429030fe Mon Sep 17 00:00:00 2001
99cbc7
Message-Id: <ff7bc70a5e5d7aaf354ce501653beb82429030fe@dist-git>
99cbc7
From: Laine Stump <laine@laine.org>
99cbc7
Date: Thu, 11 Apr 2019 15:14:46 -0400
99cbc7
Subject: [PATCH] qemu_hotplug: separate Chr|Lease from other devices in
99cbc7
 DetachDevice switch
99cbc7
99cbc7
The Chr and Lease devices have detach code that is too different from
99cbc7
the other device types to handle with common functionality (which will
99cbc7
soon be added at the end of qemuDomainDetachDeviceLive(). In order to
99cbc7
make this difference obvious, move the cases for those two device
99cbc7
types to the top of the switch statement in
99cbc7
qemuDomainDetachDeviceLive(), have the cases return immediately so the
99cbc7
future common code at the end of the function will be skipped, and
99cbc7
also include some hopefully helpful comments to remind future
99cbc7
maintainers why these two device types are treated differently.
99cbc7
99cbc7
Any attempt to detach an unsupported device type should also skip the
99cbc7
future common code at the end of the function, so the case for
99cbc7
unsupported types is similarly changed from a simple break to a return
99cbc7
-1.
99cbc7
99cbc7
Signed-off-by: Laine Stump <laine@laine.org>
99cbc7
ACKed-by: Peter Krempa <pkrempa@redhat.com>
99cbc7
(cherry picked from commit 2ec6faea798b2a7d8986b7a958e781b54d8a8070)
99cbc7
99cbc7
Partially-Resolves: https://bugzilla.redhat.com/1658198
99cbc7
Signed-off-by: Laine Stump <laine@redhat.com>
99cbc7
Signed-off-by: Laine Stump <laine@laine.org>
99cbc7
Message-Id: <20190411191453.24055-35-laine@redhat.com>
99cbc7
Acked-by: Michal Privoznik <mprivozn@redhat.com>
99cbc7
---
99cbc7
 src/qemu/qemu_hotplug.c | 26 +++++++++++++++++++-------
99cbc7
 1 file changed, 19 insertions(+), 7 deletions(-)
99cbc7
99cbc7
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
99cbc7
index a655fc391f..9c0ee1c6a5 100644
99cbc7
--- a/src/qemu/qemu_hotplug.c
99cbc7
+++ b/src/qemu/qemu_hotplug.c
99cbc7
@@ -5657,24 +5657,36 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
99cbc7
     int ret = -1;
99cbc7
 
99cbc7
     switch ((virDomainDeviceType)match->type) {
99cbc7
+        /*
99cbc7
+         * lease and chr devices don't follow the standard pattern of
99cbc7
+         * the others, so they must have their own self-contained
99cbc7
+         * Detach functions.
99cbc7
+         */
99cbc7
+    case VIR_DOMAIN_DEVICE_LEASE:
99cbc7
+        return qemuDomainDetachLease(driver, vm, match->data.lease);
99cbc7
+
99cbc7
+    case VIR_DOMAIN_DEVICE_CHR:
99cbc7
+        return qemuDomainDetachChrDevice(driver, vm, match->data.chr, async);
99cbc7
+
99cbc7
+        /*
99cbc7
+         * All the other device types follow a very similar pattern -
99cbc7
+         * First we call type-specific functions to 1) locate the
99cbc7
+         * device we want to detach (based on the prototype device in
99cbc7
+         * match) and 2) do any device-type-specific validation to
99cbc7
+         * assure it is okay to detach the device.
99cbc7
+         */
99cbc7
     case VIR_DOMAIN_DEVICE_DISK:
99cbc7
         ret = qemuDomainDetachDeviceDiskLive(driver, vm, match, async);
99cbc7
         break;
99cbc7
     case VIR_DOMAIN_DEVICE_CONTROLLER:
99cbc7
         ret = qemuDomainDetachControllerDevice(driver, vm, match, async);
99cbc7
         break;
99cbc7
-    case VIR_DOMAIN_DEVICE_LEASE:
99cbc7
-        ret = qemuDomainDetachLease(driver, vm, match->data.lease);
99cbc7
-        break;
99cbc7
     case VIR_DOMAIN_DEVICE_NET:
99cbc7
         ret = qemuDomainDetachNetDevice(driver, vm, match, async);
99cbc7
         break;
99cbc7
     case VIR_DOMAIN_DEVICE_HOSTDEV:
99cbc7
         ret = qemuDomainDetachHostDevice(driver, vm, match, async);
99cbc7
         break;
99cbc7
-    case VIR_DOMAIN_DEVICE_CHR:
99cbc7
-        ret = qemuDomainDetachChrDevice(driver, vm, match->data.chr, async);
99cbc7
-        break;
99cbc7
     case VIR_DOMAIN_DEVICE_RNG:
99cbc7
         ret = qemuDomainDetachRNGDevice(driver, vm, match->data.rng, async);
99cbc7
         break;
99cbc7
@@ -5714,7 +5726,7 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm,
99cbc7
         virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
99cbc7
                        _("live detach of device '%s' is not supported"),
99cbc7
                        virDomainDeviceTypeToString(match->type));
99cbc7
-        break;
99cbc7
+        return -1;
99cbc7
     }
99cbc7
 
99cbc7
     return ret;
99cbc7
-- 
99cbc7
2.21.0
99cbc7