mac80211: Use queue_lock() in ieee80211_ht_agg_queue_remove().
authorDavid S. Miller <davem@davemloft.net>
Sun, 3 Aug 2008 06:25:50 +0000 (23:25 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 3 Aug 2008 06:25:50 +0000 (23:25 -0700)
qdisc_root_lock() is only %100 safe to use when the RTNL
semaphore is held.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/mac80211/wme.c

index 28437f0..4310e2f 100644 (file)
@@ -241,12 +241,14 @@ void ieee80211_ht_agg_queue_remove(struct ieee80211_local *local,
        } else {
                struct netdev_queue *txq;
                spinlock_t *root_lock;
+               struct Qdisc *q;
 
                txq = netdev_get_tx_queue(local->mdev, agg_queue);
-               root_lock = qdisc_root_lock(txq->qdisc);
+               q = rcu_dereference(txq->qdisc);
+               root_lock = qdisc_lock(q);
 
                spin_lock_bh(root_lock);
-               qdisc_reset(txq->qdisc);
+               qdisc_reset(q);
                spin_unlock_bh(root_lock);
        }
 }