diff options
Diffstat (limited to 'drivers/net/wireless')
| -rw-r--r-- | drivers/net/wireless/b43/main.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index fa4b0d8b74a2..a70827793086 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c @@ -2883,12 +2883,11 @@ static int b43_op_tx(struct ieee80211_hw *hw,  	if (unlikely(skb->len < 2 + 2 + 6)) {  		/* Too short, this can't be a valid frame. */ -		dev_kfree_skb_any(skb); -		return NETDEV_TX_OK; +		goto drop_packet;  	}  	B43_WARN_ON(skb_shinfo(skb)->nr_frags);  	if (unlikely(!dev)) -		return NETDEV_TX_BUSY; +		goto drop_packet;  	/* Transmissions on seperate queues can run concurrently. */  	read_lock_irqsave(&wl->tx_lock, flags); @@ -2904,7 +2903,12 @@ static int b43_op_tx(struct ieee80211_hw *hw,  	read_unlock_irqrestore(&wl->tx_lock, flags);  	if (unlikely(err)) -		return NETDEV_TX_BUSY; +		goto drop_packet; +	return NETDEV_TX_OK; + +drop_packet: +	/* We can not transmit this packet. Drop it. */ +	dev_kfree_skb_any(skb);  	return NETDEV_TX_OK;  }  | 
