From e386e2ddc9247cf42f897b5b3a1824596c0dbcbf Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Fri, 29 Oct 2010 12:14:53 +0000 Subject: [PATCH] --- yaml --- r: 224154 b: refs/heads/master c: e1e78db628b33c657944865e3bca01ee59cc5b80 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/core/dev.c | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index 941196ab6c7d..a6bcc675d639 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 410989f65151557701ce86875b141e694281dd6c +refs/heads/master: e1e78db628b33c657944865e3bca01ee59cc5b80 diff --git a/trunk/net/core/dev.c b/trunk/net/core/dev.c index 5968c822c999..0b403d503311 100644 --- a/trunk/net/core/dev.c +++ b/trunk/net/core/dev.c @@ -1976,15 +1976,20 @@ static inline void skb_orphan_try(struct sk_buff *skb) static inline int skb_needs_linearize(struct sk_buff *skb, struct net_device *dev) { - int features = dev->features; + if (skb_is_nonlinear(skb)) { + int features = dev->features; - if (skb->protocol == htons(ETH_P_8021Q) || vlan_tx_tag_present(skb)) - features &= dev->vlan_features; + if (vlan_tx_tag_present(skb)) + features &= dev->vlan_features; - return skb_is_nonlinear(skb) && - ((skb_has_frag_list(skb) && !(features & NETIF_F_FRAGLIST)) || - (skb_shinfo(skb)->nr_frags && (!(features & NETIF_F_SG) || - illegal_highdma(dev, skb)))); + return (skb_has_frag_list(skb) && + !(features & NETIF_F_FRAGLIST)) || + (skb_shinfo(skb)->nr_frags && + (!(features & NETIF_F_SG) || + illegal_highdma(dev, skb))); + } + + return 0; } int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,