diff options
Diffstat (limited to 'net/sched/sch_teql.c')
-rw-r--r-- | net/sched/sch_teql.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/sched/sch_teql.c b/net/sched/sch_teql.c index ade3372221c7..8b0ff345f9da 100644 --- a/net/sched/sch_teql.c +++ b/net/sched/sch_teql.c | |||
@@ -156,12 +156,15 @@ teql_destroy(struct Qdisc* sch) | |||
156 | master->slaves = NEXT_SLAVE(q); | 156 | master->slaves = NEXT_SLAVE(q); |
157 | if (q == master->slaves) { | 157 | if (q == master->slaves) { |
158 | struct netdev_queue *txq; | 158 | struct netdev_queue *txq; |
159 | spinlock_t *root_lock; | ||
159 | 160 | ||
160 | txq = netdev_get_tx_queue(master->dev, 0); | 161 | txq = netdev_get_tx_queue(master->dev, 0); |
161 | master->slaves = NULL; | 162 | master->slaves = NULL; |
162 | spin_lock_bh(&txq->lock); | 163 | |
164 | root_lock = qdisc_root_lock(txq->qdisc); | ||
165 | spin_lock_bh(root_lock); | ||
163 | qdisc_reset(txq->qdisc); | 166 | qdisc_reset(txq->qdisc); |
164 | spin_unlock_bh(&txq->lock); | 167 | spin_unlock_bh(root_lock); |
165 | } | 168 | } |
166 | } | 169 | } |
167 | skb_queue_purge(&dat->q); | 170 | skb_queue_purge(&dat->q); |