aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wimax/i2400m/netdev.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/net/wimax/i2400m/netdev.c b/drivers/net/wimax/i2400m/netdev.c
index fefd794087ad..e7d1a51ee3fe 100644
--- a/drivers/net/wimax/i2400m/netdev.c
+++ b/drivers/net/wimax/i2400m/netdev.c
@@ -358,6 +358,20 @@ netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb,
358 int result; 358 int result;
359 359
360 d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev); 360 d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev);
361 if (skb_header_cloned(skb)) {
362 /*
363 * Make tcpdump/wireshark happy -- if they are
364 * running, the skb is cloned and we will overwrite
365 * the mac fields in i2400m_tx_prep_header. Expand
366 * seems to fix this...
367 */
368 result = pskb_expand_head(skb, 0, 0, GFP_ATOMIC);
369 if (result) {
370 result = NETDEV_TX_BUSY;
371 goto error_expand;
372 }
373 }
374
361 if (i2400m->state == I2400M_SS_IDLE) 375 if (i2400m->state == I2400M_SS_IDLE)
362 result = i2400m_net_wake_tx(i2400m, net_dev, skb); 376 result = i2400m_net_wake_tx(i2400m, net_dev, skb);
363 else 377 else
@@ -368,10 +382,11 @@ netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb,
368 net_dev->stats.tx_packets++; 382 net_dev->stats.tx_packets++;
369 net_dev->stats.tx_bytes += skb->len; 383 net_dev->stats.tx_bytes += skb->len;
370 } 384 }
385 result = NETDEV_TX_OK;
386error_expand:
371 kfree_skb(skb); 387 kfree_skb(skb);
372 388 d_fnend(3, dev, "(skb %p net_dev %p) = %d\n", skb, net_dev, result);
373 d_fnend(3, dev, "(skb %p net_dev %p)\n", skb, net_dev); 389 return result;
374 return NETDEV_TX_OK;
375} 390}
376 391
377 392