From 39c0b7b259fc6ec3c4104c4ba183cd9c6a4f8195 Mon Sep 17 00:00:00 2001 From: Inaky Perez-Gonzalez Date: Tue, 29 Sep 2009 16:28:24 -0700 Subject: [PATCH] --- yaml --- r: 171227 b: refs/heads/master c: 9835fd84990ca253c5b625005717a9be492788c0 h: refs/heads/master i: 171225: 108e67a5ffcc8cfb5b9f6ed93d8fafc12dbf3dde 171223: 44cf5b47e1d35b5a36cc426d343e46183cdecc66 v: v3 --- [refs] | 2 +- trunk/drivers/net/wimax/i2400m/netdev.c | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 9bef7fae3f6e..948df8703f03 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e1633fd636f3ed0379fcf08c47962205eadddb6b +refs/heads/master: 9835fd84990ca253c5b625005717a9be492788c0 diff --git a/trunk/drivers/net/wimax/i2400m/netdev.c b/trunk/drivers/net/wimax/i2400m/netdev.c index fefd794087ad..e7d1a51ee3fe 100644 --- a/trunk/drivers/net/wimax/i2400m/netdev.c +++ b/trunk/drivers/net/wimax/i2400m/netdev.c @@ -358,6 +358,20 @@ netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb, int result; d_fnstart(3, dev, "(skb %p net_dev %p)\n", skb, net_dev); + if (skb_header_cloned(skb)) { + /* + * Make tcpdump/wireshark happy -- if they are + * running, the skb is cloned and we will overwrite + * the mac fields in i2400m_tx_prep_header. Expand + * seems to fix this... + */ + result = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); + if (result) { + result = NETDEV_TX_BUSY; + goto error_expand; + } + } + if (i2400m->state == I2400M_SS_IDLE) result = i2400m_net_wake_tx(i2400m, net_dev, skb); else @@ -368,10 +382,11 @@ netdev_tx_t i2400m_hard_start_xmit(struct sk_buff *skb, net_dev->stats.tx_packets++; net_dev->stats.tx_bytes += skb->len; } + result = NETDEV_TX_OK; +error_expand: kfree_skb(skb); - - d_fnend(3, dev, "(skb %p net_dev %p)\n", skb, net_dev); - return NETDEV_TX_OK; + d_fnend(3, dev, "(skb %p net_dev %p) = %d\n", skb, net_dev, result); + return result; }