aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/atheros/atl1c/atl1c_main.c14
-rw-r--r--drivers/net/ethernet/atheros/atl1e/atl1e_main.c14
-rw-r--r--drivers/net/ethernet/atheros/atlx/atl1.c15
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c3
-rw-r--r--drivers/net/ethernet/brocade/bna/bnad.c10
-rw-r--r--drivers/net/ethernet/jme.c16
-rw-r--r--drivers/net/ethernet/qlogic/qlge/qlge_main.c9
-rw-r--r--drivers/net/wimax/i2400m/netdev.c3
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)
1641static int atl1e_tso_csum(struct atl1e_adapter *adapter, 1641static 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
2120static int atl1_tso(struct atl1_adapter *adapter, struct sk_buff *skb, 2120static 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
2181static int atl1_tx_csum(struct atl1_adapter *adapter, struct sk_buff *skb, 2180static 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
2056static int 2056static int
2057jme_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
2069static int
2070jme_tx_tso(struct sk_buff *skb, __le16 *mss, u8 *flags) 2057jme_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)