diff options
author | Michał Mirosław <mirq-linux@rere.qmqm.pl> | 2011-05-06 03:56:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-05-12 17:54:13 -0400 |
commit | f0a619ccfb8a2ec8ff083a02299cfd076c362b27 (patch) | |
tree | 88b90e6fcec0947fc46eb178948ac78d1dc45134 /net/8021q/vlan_dev.c | |
parent | 864b5418ebc16893cfd27ff3cda254eff0f56d6f (diff) |
net: Fix vlan_features propagation
Fix VLAN features propagation for devices which change vlan_features.
For this to work, driver needs to make sure netdev_features_changed()
gets called after the change (it is e.g. after ndo_set_features()).
Side effect is that a user might request features that will never
be enabled on a VLAN device.
Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/8021q/vlan_dev.c')
-rw-r--r-- | net/8021q/vlan_dev.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index 58f8010e1aef..f247f5bff88d 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
@@ -528,7 +528,7 @@ static int vlan_dev_init(struct net_device *dev) | |||
528 | (1<<__LINK_STATE_DORMANT))) | | 528 | (1<<__LINK_STATE_DORMANT))) | |
529 | (1<<__LINK_STATE_PRESENT); | 529 | (1<<__LINK_STATE_PRESENT); |
530 | 530 | ||
531 | dev->hw_features = real_dev->vlan_features & NETIF_F_ALL_TX_OFFLOADS; | 531 | dev->hw_features = NETIF_F_ALL_TX_OFFLOADS; |
532 | dev->features |= real_dev->vlan_features | NETIF_F_LLTX; | 532 | dev->features |= real_dev->vlan_features | NETIF_F_LLTX; |
533 | dev->gso_max_size = real_dev->gso_max_size; | 533 | dev->gso_max_size = real_dev->gso_max_size; |
534 | 534 | ||
@@ -587,9 +587,11 @@ static u32 vlan_dev_fix_features(struct net_device *dev, u32 features) | |||
587 | { | 587 | { |
588 | struct net_device *real_dev = vlan_dev_info(dev)->real_dev; | 588 | struct net_device *real_dev = vlan_dev_info(dev)->real_dev; |
589 | 589 | ||
590 | features &= (real_dev->features | NETIF_F_LLTX); | 590 | features &= real_dev->features; |
591 | features &= real_dev->vlan_features; | ||
591 | if (dev_ethtool_get_rx_csum(real_dev)) | 592 | if (dev_ethtool_get_rx_csum(real_dev)) |
592 | features |= NETIF_F_RXCSUM; | 593 | features |= NETIF_F_RXCSUM; |
594 | features |= NETIF_F_LLTX; | ||
593 | 595 | ||
594 | return features; | 596 | return features; |
595 | } | 597 | } |