diff options
-rw-r--r-- | drivers/net/ethernet/atheros/atl1c/atl1c_main.c | 14 | ||||
-rw-r--r-- | drivers/net/ethernet/atheros/atl1e/atl1e_main.c | 14 | ||||
-rw-r--r-- | drivers/net/ethernet/atheros/atlx/atl1.c | 15 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/tg3.c | 3 | ||||
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bnad.c | 10 | ||||
-rw-r--r-- | drivers/net/ethernet/jme.c | 16 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlge/qlge_main.c | 9 | ||||
-rw-r--r-- | drivers/net/wimax/i2400m/netdev.c | 3 |
8 files changed, 33 insertions, 51 deletions
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c index 31f262302128..e11bf18fbbd1 100644 --- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c +++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c | |||
@@ -1973,17 +1973,17 @@ static int atl1c_tso_csum(struct atl1c_adapter *adapter, | |||
1973 | enum atl1c_trans_queue type) | 1973 | enum atl1c_trans_queue type) |
1974 | { | 1974 | { |
1975 | struct pci_dev *pdev = adapter->pdev; | 1975 | struct pci_dev *pdev = adapter->pdev; |
1976 | unsigned short offload_type; | ||
1976 | u8 hdr_len; | 1977 | u8 hdr_len; |
1977 | u32 real_len; | 1978 | u32 real_len; |
1978 | unsigned short offload_type; | ||
1979 | int err; | ||
1980 | 1979 | ||
1981 | if (skb_is_gso(skb)) { | 1980 | if (skb_is_gso(skb)) { |
1982 | if (skb_header_cloned(skb)) { | 1981 | int err; |
1983 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | 1982 | |
1984 | if (unlikely(err)) | 1983 | err = skb_cow_head(skb, 0); |
1985 | return -1; | 1984 | if (err < 0) |
1986 | } | 1985 | return err; |
1986 | |||
1987 | offload_type = skb_shinfo(skb)->gso_type; | 1987 | offload_type = skb_shinfo(skb)->gso_type; |
1988 | 1988 | ||
1989 | if (offload_type & SKB_GSO_TCPV4) { | 1989 | if (offload_type & SKB_GSO_TCPV4) { |
diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c index 422aab27ea1b..4345332533ad 100644 --- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c +++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c | |||
@@ -1641,17 +1641,17 @@ static u16 atl1e_cal_tdp_req(const struct sk_buff *skb) | |||
1641 | static int atl1e_tso_csum(struct atl1e_adapter *adapter, | 1641 | static int atl1e_tso_csum(struct atl1e_adapter *adapter, |
1642 | struct sk_buff *skb, struct atl1e_tpd_desc *tpd) | 1642 | struct sk_buff *skb, struct atl1e_tpd_desc *tpd) |
1643 | { | 1643 | { |
1644 | unsigned short offload_type; | ||
1644 | u8 hdr_len; | 1645 | u8 hdr_len; |
1645 | u32 real_len; | 1646 | u32 real_len; |
1646 | unsigned short offload_type; | ||
1647 | int err; | ||
1648 | 1647 | ||
1649 | if (skb_is_gso(skb)) { | 1648 | if (skb_is_gso(skb)) { |
1650 | if (skb_header_cloned(skb)) { | 1649 | int err; |
1651 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | 1650 | |
1652 | if (unlikely(err)) | 1651 | err = skb_cow_head(skb, 0); |
1653 | return -1; | 1652 | if (err < 0) |
1654 | } | 1653 | return err; |
1654 | |||
1655 | offload_type = skb_shinfo(skb)->gso_type; | 1655 | offload_type = skb_shinfo(skb)->gso_type; |
1656 | 1656 | ||
1657 | if (offload_type & SKB_GSO_TCPV4) { | 1657 | if (offload_type & SKB_GSO_TCPV4) { |
diff --git a/drivers/net/ethernet/atheros/atlx/atl1.c b/drivers/net/ethernet/atheros/atlx/atl1.c index 287272dd69da..dfd0e91fa726 100644 --- a/drivers/net/ethernet/atheros/atlx/atl1.c +++ b/drivers/net/ethernet/atheros/atlx/atl1.c | |||
@@ -2118,18 +2118,17 @@ static u16 atl1_tpd_avail(struct atl1_tpd_ring *tpd_ring) | |||
2118 | } | 2118 | } |
2119 | 2119 | ||
2120 | static int atl1_tso(struct atl1_adapter *adapter, struct sk_buff *skb, | 2120 | static int atl1_tso(struct atl1_adapter *adapter, struct sk_buff *skb, |
2121 | struct tx_packet_desc *ptpd) | 2121 | struct tx_packet_desc *ptpd) |
2122 | { | 2122 | { |
2123 | u8 hdr_len, ip_off; | 2123 | u8 hdr_len, ip_off; |
2124 | u32 real_len; | 2124 | u32 real_len; |
2125 | int err; | ||
2126 | 2125 | ||
2127 | if (skb_shinfo(skb)->gso_size) { | 2126 | if (skb_shinfo(skb)->gso_size) { |
2128 | if (skb_header_cloned(skb)) { | 2127 | int err; |
2129 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | 2128 | |
2130 | if (unlikely(err)) | 2129 | err = skb_cow_head(skb, 0); |
2131 | return -1; | 2130 | if (err < 0) |
2132 | } | 2131 | return err; |
2133 | 2132 | ||
2134 | if (skb->protocol == htons(ETH_P_IP)) { | 2133 | if (skb->protocol == htons(ETH_P_IP)) { |
2135 | struct iphdr *iph = ip_hdr(skb); | 2134 | struct iphdr *iph = ip_hdr(skb); |
@@ -2175,7 +2174,7 @@ static int atl1_tso(struct atl1_adapter *adapter, struct sk_buff *skb, | |||
2175 | return 3; | 2174 | return 3; |
2176 | } | 2175 | } |
2177 | } | 2176 | } |
2178 | return false; | 2177 | return 0; |
2179 | } | 2178 | } |
2180 | 2179 | ||
2181 | static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb, | 2180 | static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb, |
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index 1ac461a7d949..22586e92da0e 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -7918,8 +7918,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
7918 | struct iphdr *iph; | 7918 | struct iphdr *iph; |
7919 | u32 tcp_opt_len, hdr_len; | 7919 | u32 tcp_opt_len, hdr_len; |
7920 | 7920 | ||
7921 | if (skb_header_cloned(skb) && | 7921 | if (skb_cow_head(skb, 0)) |
7922 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) | ||
7923 | goto drop; | 7922 | goto drop; |
7924 | 7923 | ||
7925 | iph = ip_hdr(skb); | 7924 | iph = ip_hdr(skb); |
diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c index a881e982a084..675550fe8ee9 100644 --- a/drivers/net/ethernet/brocade/bna/bnad.c +++ b/drivers/net/ethernet/brocade/bna/bnad.c | |||
@@ -2496,12 +2496,10 @@ bnad_tso_prepare(struct bnad *bnad, struct sk_buff *skb) | |||
2496 | { | 2496 | { |
2497 | int err; | 2497 | int err; |
2498 | 2498 | ||
2499 | if (skb_header_cloned(skb)) { | 2499 | err = skb_cow_head(skb, 0); |
2500 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | 2500 | if (err < 0) { |
2501 | if (err) { | 2501 | BNAD_UPDATE_CTR(bnad, tso_err); |
2502 | BNAD_UPDATE_CTR(bnad, tso_err); | 2502 | return err; |
2503 | return err; | ||
2504 | } | ||
2505 | } | 2503 | } |
2506 | 2504 | ||
2507 | /* | 2505 | /* |
diff --git a/drivers/net/ethernet/jme.c b/drivers/net/ethernet/jme.c index 14ff8d64257d..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_any(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 | } |
diff --git a/drivers/net/ethernet/qlogic/qlge/qlge_main.c b/drivers/net/ethernet/qlogic/qlge/qlge_main.c index adf87d26e68f..5b63405f9d3c 100644 --- a/drivers/net/ethernet/qlogic/qlge/qlge_main.c +++ b/drivers/net/ethernet/qlogic/qlge/qlge_main.c | |||
@@ -2556,11 +2556,10 @@ static int ql_tso(struct sk_buff *skb, struct ob_mac_tso_iocb_req *mac_iocb_ptr) | |||
2556 | 2556 | ||
2557 | if (skb_is_gso(skb)) { | 2557 | if (skb_is_gso(skb)) { |
2558 | int err; | 2558 | int err; |
2559 | if (skb_header_cloned(skb)) { | 2559 | |
2560 | err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); | 2560 | err = skb_cow_head(skb, 0); |
2561 | if (err) | 2561 | if (err < 0) |
2562 | return err; | 2562 | return err; |
2563 | } | ||
2564 | 2563 | ||
2565 | mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB; | 2564 | mac_iocb_ptr->opcode = OPCODE_OB_MAC_TSO_IOCB; |
2566 | mac_iocb_ptr->flags3 |= OB_MAC_TSO_IOCB_IC; | 2565 | mac_iocb_ptr->flags3 |= OB_MAC_TSO_IOCB_IC; |
diff --git a/drivers/net/wimax/i2400m/netdev.c b/drivers/net/wimax/i2400m/netdev.c index 48896138418f..a9970f1af976 100644 --- a/drivers/net/wimax/i2400m/netdev.c +++ b/drivers/net/wimax/i2400m/netdev.c | |||
@@ -374,8 +374,7 @@ netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb, | |||
374 | 374 | ||
375 | d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev); | 375 | d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev); |
376 | 376 | ||
377 | if (skb_header_cloned(skb) && | 377 | if (skb_cow_head(skb, 0)) |
378 | pskb_expand_head(skb, 0, 0, GFP_ATOMIC)) | ||
379 | goto drop; | 378 | goto drop; |
380 | 379 | ||
381 | if (i2400m->state == I2400M_SS_IDLE) | 380 | if (i2400m->state == I2400M_SS_IDLE) |