5ee6d24 qemuDomainSetInterfaceParameters: Use new functions to update bandwidth

Authored and Committed by mprivozn 8 years ago
    qemuDomainSetInterfaceParameters: Use new functions to update bandwidth
    
    As sketched in previous commits, imagine the following scenario:
    
      virsh # domiftune gentoo vnet0
      inbound.average: 100
      inbound.peak   : 0
      inbound.burst  : 0
      outbound.average: 100
      outbound.peak  : 0
      outbound.burst : 0
    
      virsh # domiftune gentoo vnet0 --inbound 0
    
      virsh # shutdown gentoo
      Domain gentoo is being shutdown
    
      virsh # list --all
      error: Failed to list domains
      error: Cannot recv data: Connection reset by peer
    
      Program received signal SIGSEGV, Segmentation fault.
      0x00007fffe80ea221 in networkUnplugBandwidth (net=0x7fff9400c1a0, iface=0x7fff940ea3e0) at network/bridge_driver.c:4881
      4881            net->floor_sum -= ifaceBand->in->floor;
    
    This is rather unfortunate. We should not SIGSEGV here. The
    problem is, that while in the second step the inbound QoS was
    cleared out, the network part of it was not updated (moreover, we
    don't report that vnet0 had inbound.floor set). Internal
    structure therefore still had some fragments left (e.g.
    class_id). So when qemuProcessStop() started to clean up the
    environment it got to networkUnplugBandwidth(). Here, class_id is
    set therefore function assumes that there is an inbound QoS. This
    actually is a fair assumption to make, there's no need for a
    special QoS box in network's QoS when there's no QoS to set.
    Anyway, the problem is not the networkUnplugBandwidth() rather
    than qemuDomainSetInterfaceParameters() which completely forgot
    about QoS being disperse (some parts are set directly on
    interface itself, some on bridge the interface is plugged into).
    
    Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
    
        
file modified
+6 -1