diff options
| author | David S. Miller <davem@davemloft.net> | 2008-08-03 02:25:50 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-08-03 02:25:50 -0400 |
| commit | 35ed4e75989c4e84a44b25569bbf09b98f923880 (patch) | |
| tree | db12e24912d7525dde5d1c50f0159ccdeab7076e | |
| parent | 5fb662297b8a4bdadd60371c34b760efca948ebc (diff) | |
mac80211: Use queue_lock() in ieee80211_ht_agg_queue_remove().
qdisc_root_lock() is only %100 safe to use when the RTNL
semaphore is held.
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/mac80211/wme.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c index 28437f0001db..4310e2f65661 100644 --- a/net/mac80211/wme.c +++ b/net/mac80211/wme.c | |||
| @@ -241,12 +241,14 @@ void ieee80211_ht_agg_queue_remove(struct ieee80211_local *local, | |||
| 241 | } else { | 241 | } else { |
| 242 | struct netdev_queue *txq; | 242 | struct netdev_queue *txq; |
| 243 | spinlock_t *root_lock; | 243 | spinlock_t *root_lock; |
| 244 | struct Qdisc *q; | ||
| 244 | 245 | ||
| 245 | txq = netdev_get_tx_queue(local->mdev, agg_queue); | 246 | txq = netdev_get_tx_queue(local->mdev, agg_queue); |
| 246 | root_lock = qdisc_root_lock(txq->qdisc); | 247 | q = rcu_dereference(txq->qdisc); |
| 248 | root_lock = qdisc_lock(q); | ||
| 247 | 249 | ||
| 248 | spin_lock_bh(root_lock); | 250 | spin_lock_bh(root_lock); |
| 249 | qdisc_reset(txq->qdisc); | 251 | qdisc_reset(q); |
| 250 | spin_unlock_bh(root_lock); | 252 | spin_unlock_bh(root_lock); |
| 251 | } | 253 | } |
| 252 | } | 254 | } |
