diff options
Diffstat (limited to 'drivers/net/ethernet/jme.c')
-rw-r--r-- | drivers/net/ethernet/jme.c | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c index f5685c0d0579..b0c6050479eb 100644 --- a/drivers/net/ethernet/jme.c +++ b/drivers/net/ethernet/jme.c | |||
@@ -2054,19 +2054,6 @@ jme_map_tx_skb(struct jme_adapter *jme, struct sk_buff *skb, int idx) | |||
2054 | } | 2054 | } |
2055 | 2055 | ||
2056 | static int | 2056 | static int |
2057 | jme_expand_header(struct jme_adapter *jme, struct sk_buff *skb) | ||
2058 | { | ||
2059 | if (unlikely(skb_shinfo(skb)->gso_size && | ||
2060 | skb_header_cloned(skb) && | ||
2061 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC))) { | ||
2062 | dev_kfree_skb(skb); | ||
2063 | return -1; | ||
2064 | } | ||
2065 | |||
2066 | return 0; | ||
2067 | } | ||
2068 | |||
2069 | static int | ||
2070 | jme_tx_tso(struct sk_buff *skb, __le16 *mss, u8 *flags) | 2057 | jme_tx_tso(struct sk_buff *skb, __le16 *mss, u8 *flags) |
2071 | { | 2058 | { |
2072 | *mss = cpu_to_le16(skb_shinfo(skb)->gso_size << TXDESC_MSS_SHIFT); | 2059 | *mss = cpu_to_le16(skb_shinfo(skb)->gso_size << TXDESC_MSS_SHIFT); |
@@ -2225,7 +2212,8 @@ jme_start_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
2225 | struct jme_adapter *jme = netdev_priv(netdev); | 2212 | struct jme_adapter *jme = netdev_priv(netdev); |
2226 | int idx; | 2213 | int idx; |
2227 | 2214 | ||
2228 | if (unlikely(jme_expand_header(jme, skb))) { | 2215 | if (unlikely(skb_is_gso(skb) && skb_cow_head(skb, 0))) { |
2216 | dev_kfree_skb_any(skb); | ||
2229 | ++(NET_STAT(jme).tx_dropped); | 2217 | ++(NET_STAT(jme).tx_dropped); |
2230 | return NETDEV_TX_OK; | 2218 | return NETDEV_TX_OK; |
2231 | } | 2219 | } |