The dev_disable_lro warning is happening due to some logic issues in the
features code. The LRO on the VLAN (bond0.200, e.g.) that's being
warned about does end up being disabled by a NETDEV_FEAT_CHANGE callback
when the underlying bond0's features are updated, so the warning is
spurious.
Tracing the dev_disable_lro -> netdev_update_features for the bond0.2004
VLAN, I see:
name="bond0" feat=219db89 hw_feat=20219cbe9 want_feat=20219cbe9
vlan_feat=198069
NETIF_F_LRO = 0x8000
dev_disable_lro
wanted_features &= ~NETIF_F_LRO
bond0.2004 wanted_features = 0x200194869 # no LRO
__netdev_update_features
features = netdev_get_wanted_features
return (dev->features & ~dev->hw_features) | dev->wanted_features;
(0x19d809 & ~0x23839487b) | 0x200194869
^LRO ^no LRO ^no LRO
0x9000 | 0x200194869
$2 = 0x20019d869
^ LRO
vlan_dev_fix_features(dev, 0x20019d869) # has LRO
struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
netdev_features_t old_features = features;
features &= real_dev->vlan_features; # 0x198069 has LRO
features |= NETIF_F_RXCSUM; # 0x100198069 has LRO
features &= real_dev->features; # 0x198009 has LRO
features |= old_features & NETIF_F_SOFT_FEATURES; # save GSO / GRO
features |= NETIF_F_LLTX;
return features; # will have LRO
So, basically, LRO is set in the underlying bond0's features, so it ends
up being kept in the VLAN device's features even though it wasn't in
wanted_features. Later, dev_disable_lro will call dev_disable_lro on
all the lower devices (the bond0 in this case), and the update of
features for the bond0 will issue a NETDEV_FEAT_CHANGE callback to the
bond0.2004 VLAN, which will then set the features correctly.
The Ubuntu 3.13 __netdev_update_features (called by dev_disable_lro via
netdev_update_features) lacks additional logic found in later kernels to
sync the features to lower devices. That presumably triggers the
NETDEV_FEAT_CHANGE within the call to __netdev_update_features so that
the bond0.2004 VLAN is updated before we return back to dev_disable_lro
(but I haven't verified this).
I suspect the fix to eliminate the warning is to apply the "sync_lower:"
block from a later kernel __netdev_update_features to 3.13, along with
the netdev_sync_lower_features function it uses.
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1771480
Title:
WARNING: CPU: 28 PID: 34085 at /build/linux-
90Gc2C/linux-3.13.0/net/core/dev.c:1433 dev_disable_lro+0x87/0x90()
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1771480/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs