diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 6 | 
1 files changed, 3 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 54277df0f73..7c6a46f8037 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -2001,7 +2001,7 @@ static bool can_checksum_protocol(unsigned long features, __be16 protocol)  static int harmonize_features(struct sk_buff *skb, __be16 protocol, int features)  { -	if (!can_checksum_protocol(protocol, features)) { +	if (!can_checksum_protocol(features, protocol)) {  		features &= ~NETIF_F_ALL_CSUM;  		features &= ~NETIF_F_SG;  	} else if (illegal_highdma(skb->dev, skb)) { @@ -2023,13 +2023,13 @@ int netif_skb_features(struct sk_buff *skb)  		return harmonize_features(skb, protocol, features);  	} -	features &= skb->dev->vlan_features; +	features &= (skb->dev->vlan_features | NETIF_F_HW_VLAN_TX);  	if (protocol != htons(ETH_P_8021Q)) {  		return harmonize_features(skb, protocol, features);  	} else {  		features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | -				NETIF_F_GEN_CSUM; +				NETIF_F_GEN_CSUM | NETIF_F_HW_VLAN_TX;  		return harmonize_features(skb, protocol, features);  	}  }  |