summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2010-05-31 12:00:12 +0200
committerJohn W. Linville <linville@tuxdriver.com>2010-06-01 14:33:02 -0400
commit51a0d38de26226f2779912d92f155b93d539da9a (patch)
tree9f74cc26000dcebf79c93081c9afa62b787895ff
parent8ae5977ff95c03fe6c36a5721c57dcb4bfe4f290 (diff)
downloadlinux-3.10-51a0d38de26226f2779912d92f155b93d539da9a.tar.gz
linux-3.10-51a0d38de26226f2779912d92f155b93d539da9a.tar.bz2
linux-3.10-51a0d38de26226f2779912d92f155b93d539da9a.zip
mac80211: fix dialog token allocator
The dialog token allocator has apparently been broken since b83f4e15 ("mac80211: fix deadlock in sta->lock") because it got moved out under the spinlock. Fix it. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--net/mac80211/agg-tx.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index c163d0a149f..98258b7341e 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -332,14 +332,16 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
IEEE80211_QUEUE_STOP_REASON_AGGREGATION);
spin_unlock(&local->ampdu_lock);
- spin_unlock_bh(&sta->lock);
- /* send an addBA request */
+ /* prepare tid data */
sta->ampdu_mlme.dialog_token_allocator++;
sta->ampdu_mlme.tid_tx[tid]->dialog_token =
sta->ampdu_mlme.dialog_token_allocator;
sta->ampdu_mlme.tid_tx[tid]->ssn = start_seq_num;
+ spin_unlock_bh(&sta->lock);
+
+ /* send AddBA request */
ieee80211_send_addba_request(sdata, pubsta->addr, tid,
sta->ampdu_mlme.tid_tx[tid]->dialog_token,
sta->ampdu_mlme.tid_tx[tid]->ssn,