• Michal Kubeček's avatar
    net: generic dev_disable_lro() stacked device handling · fbe168ba
    Michal Kubeček authored
    Large receive offloading is known to cause problems if received packets
    are passed to other host. Therefore the kernel disables it by calling
    dev_disable_lro() whenever a network device is enslaved in a bridge or
    forwarding is enabled for it (or globally). For virtual devices we need
    to disable LRO on the underlying physical device (which is actually
    receiving the packets).
    
    Current dev_disable_lro() code handles this  propagation for a vlan
    (including 802.1ad nested vlan), macvlan or a vlan on top of a macvlan.
    It doesn't handle other stacked devices and their combinations, in
    particular propagation from a bond to its slaves which often causes
    problems in virtualization setups.
    
    As we now have generic data structures describing the upper-lower device
    relationship, dev_disable_lro() can be generalized to disable LRO also
    for all lower devices (if any) once it is disabled for the device
    itself.
    
    For bonding and teaming devices, it is necessary to disable LRO not only
    on current slaves at the moment when dev_disable_lro() is called but
    also on any slave (port) added later.
    
    v2: use lower device links for all devices (including vlan and macvlan)
    Signed-off-by: default avatarMichal Kubecek <mkubecek@suse.cz>
    Acked-by: default avatarVeaceslav Falico <vfalico@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fbe168ba
dev.c 184 KB