aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/status.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/status.c')
-rw-r--r--net/mac80211/status.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/mac80211/status.c b/net/mac80211/status.c
index ffb0de9bc2fa..010a559bd872 100644
--- a/net/mac80211/status.c
+++ b/net/mac80211/status.c
@@ -327,6 +327,7 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
327 327
328 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) { 328 if (info->flags & IEEE80211_TX_INTFL_NL80211_FRAME_TX) {
329 struct ieee80211_work *wk; 329 struct ieee80211_work *wk;
330 u64 cookie = (unsigned long)skb;
330 331
331 rcu_read_lock(); 332 rcu_read_lock();
332 list_for_each_entry_rcu(wk, &local->work_list, list) { 333 list_for_each_entry_rcu(wk, &local->work_list, list) {
@@ -338,8 +339,12 @@ void ieee80211_tx_status(struct ieee80211_hw *hw, struct sk_buff *skb)
338 break; 339 break;
339 } 340 }
340 rcu_read_unlock(); 341 rcu_read_unlock();
342 if (local->hw_roc_skb_for_status == skb) {
343 cookie = local->hw_roc_cookie ^ 2;
344 local->hw_roc_skb_for_status = NULL;
345 }
341 cfg80211_mgmt_tx_status( 346 cfg80211_mgmt_tx_status(
342 skb->dev, (unsigned long) skb, skb->data, skb->len, 347 skb->dev, cookie, skb->data, skb->len,
343 !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC); 348 !!(info->flags & IEEE80211_TX_STAT_ACK), GFP_ATOMIC);
344 } 349 }
345 350