]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu_hotplug: Allow QoS update in qemuDomainChangeNet
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 1 Oct 2013 13:04:48 +0000 (15:04 +0200)
committerCole Robinson <crobinso@redhat.com>
Mon, 7 Oct 2013 13:51:48 +0000 (09:51 -0400)
The qemuDomainChangeNet() is called when 'virsh update-device' is
invoked on a NIC. Currently, we fail to update the QoS even though
we have routines for that.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
(cherry picked from commit 9fa10d3901a14997f724fe50ad8a33d7f0d23abe)

src/qemu/qemu_hotplug.c

index f88632da6f3cac95316ddc52d7ccdf7e70d7368a..dfcbd111c39d7b3bb2129b6f8ee266702edd127b 100644 (file)
@@ -1470,6 +1470,7 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
     bool needFilterChange = false;
     bool needLinkStateChange = false;
     bool needReplaceDevDef = false;
+    bool needBandwidthSet = false;
     int ret = -1;
 
     if (!devslot || !(olddev = *devslot)) {
@@ -1738,8 +1739,6 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
         virDomainNetGetActualDirectMode(olddev) != virDomainNetGetActualDirectMode(olddev) ||
         !virNetDevVPortProfileEqual(virDomainNetGetActualVirtPortProfile(olddev),
                                     virDomainNetGetActualVirtPortProfile(newdev)) ||
-        !virNetDevBandwidthEqual(virDomainNetGetActualBandwidth(olddev),
-                                 virDomainNetGetActualBandwidth(newdev)) ||
         !virNetDevVlanEqual(virDomainNetGetActualVlan(olddev),
                             virDomainNetGetActualVlan(newdev))) {
         needReconnect = true;
@@ -1748,6 +1747,10 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
     if (olddev->linkstate != newdev->linkstate)
         needLinkStateChange = true;
 
+    if (!virNetDevBandwidthEqual(virDomainNetGetActualBandwidth(olddev),
+                                 virDomainNetGetActualBandwidth(newdev)))
+        needBandwidthSet = true;
+
     /* FINALLY - actually perform the required actions */
 
     if (needReconnect) {
@@ -1757,6 +1760,18 @@ qemuDomainChangeNet(virQEMUDriverPtr driver,
         goto cleanup;
     }
 
+    if (needBandwidthSet) {
+        if (virNetDevBandwidthSet(newdev->ifname,
+                                  virDomainNetGetActualBandwidth(newdev),
+                                  false) < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR,
+                           _("cannot set bandwidth limits on %s"),
+                           newdev->ifname);
+            goto cleanup;
+        }
+        needReplaceDevDef = true;
+    }
+
     if (needBridgeChange) {
         if (qemuDomainChangeNetBridge(dom->conn, vm, olddev, newdev) < 0)
             goto cleanup;