render / rpms / libvirt

Forked from rpms/libvirt 9 months ago
Clone
0a7476
From 34239068029f426da9861224d0140bb50da5f56f Mon Sep 17 00:00:00 2001
0a7476
Message-Id: <34239068029f426da9861224d0140bb50da5f56f@dist-git>
0a7476
From: Laine Stump <laine@laine.org>
0a7476
Date: Thu, 11 Apr 2019 15:14:35 -0400
0a7476
Subject: [PATCH] qemu_hotplug: don't call DetachThisHostDevice for hostdev
0a7476
 network devices
0a7476
0a7476
Back in the bad old days different device types required a different
0a7476
qemu monitor call to detach them, and so an <interface type='hostdev'>
0a7476
needed to call the function for detaching hostdevs, while other
0a7476
<interface> types could be deleted as netdevs.
0a7476
0a7476
Times have changed, and *all* device types are detached by calling the
0a7476
common function qemuDomainDeleteDevice(vm, alias), so we don't need to
0a7476
differentiate between hostdev interfaces and the others for that
0a7476
reason.
0a7476
0a7476
There are a few other netdev-specific functions called during
0a7476
qemuDomainDetachNetDevice() (clearing bandwidth limits, stopping the
0a7476
interface), but those turn into NOPs when type=hostdev, so they're
0a7476
safe to call for type=hostdev.
0a7476
0a7476
The only thing that is different + not a NOP is the call to
0a7476
virDomainAudit*() when qemuDomainDeleteDevice() fails, so if we add a
0a7476
conditional for that small bit of code, we can eliminate the callout
0a7476
from qemuDomainDetachNetDevice() to qemuDomainDetachThisDevice(),
0a7476
which makes this function fit the desired pattern for merging with the
0a7476
other detach functions, and paves the way to simplifying
0a7476
qemuDomainDetachHostDevice() too.
0a7476
0a7476
Signed-off-by: Laine Stump <laine@laine.org>
0a7476
ACKed-by: Peter Krempa <pkrempa@redhat.com>
0a7476
(cherry picked from commit 48a2668151c9ba3f4c94c0a4c0412a5140885ad4)
0a7476
0a7476
Partially-Resolves: https://bugzilla.redhat.com/1658198
0a7476
Signed-off-by: Laine Stump <laine@redhat.com>
0a7476
Signed-off-by: Laine Stump <laine@laine.org>
0a7476
Message-Id: <20190411191453.24055-24-laine@redhat.com>
0a7476
Acked-by: Michal Privoznik <mprivozn@redhat.com>
0a7476
---
0a7476
 src/qemu/qemu_hotplug.c | 16 +++++++---------
0a7476
 1 file changed, 7 insertions(+), 9 deletions(-)
0a7476
0a7476
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
0a7476
index 18c98c59ec..ac395b9177 100644
0a7476
--- a/src/qemu/qemu_hotplug.c
0a7476
+++ b/src/qemu/qemu_hotplug.c
0a7476
@@ -5246,13 +5246,6 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
0a7476
 
0a7476
     detach = vm->def->nets[detachidx];
0a7476
 
0a7476
-    if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
0a7476
-        ret = qemuDomainDetachThisHostDevice(driver, vm,
0a7476
-                                             virDomainNetGetActualHostdev(detach),
0a7476
-                                             async);
0a7476
-        goto cleanup;
0a7476
-    }
0a7476
-
0a7476
     if (qemuIsMultiFunctionDevice(vm->def, &detach->info)) {
0a7476
         virReportError(VIR_ERR_OPERATION_FAILED,
0a7476
                        _("cannot hot unplug multifunction PCI device: %s"),
0a7476
@@ -5281,8 +5274,13 @@ qemuDomainDetachNetDevice(virQEMUDriverPtr driver,
0a7476
         qemuDomainMarkDeviceForRemoval(vm, &detach->info);
0a7476
 
0a7476
     if (qemuDomainDeleteDevice(vm, detach->info.alias) < 0) {
0a7476
-        if (virDomainObjIsActive(vm))
0a7476
-            virDomainAuditNet(vm, detach, NULL, "detach", false);
0a7476
+        if (virDomainObjIsActive(vm)) {
0a7476
+            /* the audit message has a different format for hostdev network devices */
0a7476
+            if (virDomainNetGetActualType(detach) == VIR_DOMAIN_NET_TYPE_HOSTDEV)
0a7476
+                virDomainAuditHostdev(vm, virDomainNetGetActualHostdev(detach), "detach", false);
0a7476
+            else
0a7476
+                virDomainAuditNet(vm, detach, NULL, "detach", false);
0a7476
+        }
0a7476
         goto cleanup;
0a7476
     }
0a7476
 
0a7476
-- 
0a7476
2.21.0
0a7476