From e49af1c290196a5ffc86484f2efb6b6f64179d91 Mon Sep 17 00:00:00 2001 From: Johannes Berg Date: Mon, 23 Mar 2009 17:28:40 +0100 Subject: [PATCH] --- yaml --- r: 136208 b: refs/heads/master c: a220858d30604902f650074bfac5a7598bc97ea4 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/mac80211/tx.c | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index ac1a834f42c8..8f30092e65e2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b1720231ca07dee3382980f3b25e6581bd2e54e9 +refs/heads/master: a220858d30604902f650074bfac5a7598bc97ea4 diff --git a/trunk/net/mac80211/tx.c b/trunk/net/mac80211/tx.c index b909e4090e93..a0e00c6339ca 100644 --- a/trunk/net/mac80211/tx.c +++ b/trunk/net/mac80211/tx.c @@ -1089,7 +1089,7 @@ static int __ieee80211_tx(struct ieee80211_local *local, { struct sk_buff *skb = *skbp, *next; struct ieee80211_tx_info *info; - int ret; + int ret, len; bool fragm = false; local->mdev->trans_start = jiffies; @@ -1125,7 +1125,12 @@ static int __ieee80211_tx(struct ieee80211_local *local, } next = skb->next; + len = skb->len; ret = local->ops->tx(local_to_hw(local), skb); + if (WARN_ON(ret != NETDEV_TX_OK && skb->len != len)) { + dev_kfree_skb(skb); + ret = NETDEV_TX_OK; + } if (ret != NETDEV_TX_OK) return IEEE80211_TX_AGAIN; *skbp = skb = next;