diff options
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r-- | net/mac80211/tx.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c index 0ea1b0d02186..1c56abc49627 100644 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c @@ -3447,13 +3447,17 @@ begin: skb_queue_splice_tail(&tx.skbs, &txqi->frags); } + if (skb && skb_has_frag_list(skb) && + !ieee80211_hw_check(&local->hw, TX_FRAG_LIST)) { + if (skb_linearize(skb)) { + ieee80211_free_txskb(&local->hw, skb); + goto begin; + } + } + out: spin_unlock_bh(&fq->lock); - if (skb && skb_has_frag_list(skb) && - !ieee80211_hw_check(&local->hw, TX_FRAG_LIST)) - skb_linearize(skb); - return skb; } EXPORT_SYMBOL(ieee80211_tx_dequeue); |