diff options
Diffstat (limited to 'net/mac80211/status.c')
-rw-r--r-- | net/mac80211/status.c | 7 |
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 | ||