b43: Do not return TX_BUSY from op_tx
Never return TX_BUSY from op_tx. It doesn't make sense to return TX_BUSY, if we can not transmit the packet. Drop the packet and return TX_OK. This will fix the resume hang. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
59d393ad92
Коммит
c9e8eae093
|
@ -2883,12 +2883,11 @@ static int b43_op_tx(struct ieee80211_hw *hw,
|
||||||
|
|
||||||
if (unlikely(skb->len < 2 + 2 + 6)) {
|
if (unlikely(skb->len < 2 + 2 + 6)) {
|
||||||
/* Too short, this can't be a valid frame. */
|
/* Too short, this can't be a valid frame. */
|
||||||
dev_kfree_skb_any(skb);
|
goto drop_packet;
|
||||||
return NETDEV_TX_OK;
|
|
||||||
}
|
}
|
||||||
B43_WARN_ON(skb_shinfo(skb)->nr_frags);
|
B43_WARN_ON(skb_shinfo(skb)->nr_frags);
|
||||||
if (unlikely(!dev))
|
if (unlikely(!dev))
|
||||||
return NETDEV_TX_BUSY;
|
goto drop_packet;
|
||||||
|
|
||||||
/* Transmissions on seperate queues can run concurrently. */
|
/* Transmissions on seperate queues can run concurrently. */
|
||||||
read_lock_irqsave(&wl->tx_lock, flags);
|
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);
|
read_unlock_irqrestore(&wl->tx_lock, flags);
|
||||||
|
|
||||||
if (unlikely(err))
|
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;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче