From: David S. Miller Date: Wed, 16 Jul 2008 09:36:04 +0000 (-0700) Subject: pkt_sched: Use per-queue locking in shutdown_scheduler_queue. X-Git-Tag: v2.6.27-rc1~969^2~62 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=17715e62a5e5c7224e5f906a4b8f9e5084100118;p=linux-2.6 pkt_sched: Use per-queue locking in shutdown_scheduler_queue. This eliminates another qdisc_lock_tree user. Signed-off-by: David S. Miller --- diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index 082db8abe7..efa418a1b3 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -757,18 +757,20 @@ static void shutdown_scheduler_queue(struct net_device *dev, struct Qdisc *qdisc_default = _qdisc_default; if (qdisc) { + spinlock_t *root_lock = qdisc_root_lock(qdisc); + dev_queue->qdisc = qdisc_default; dev_queue->qdisc_sleeping = qdisc_default; + spin_lock(root_lock); qdisc_destroy(qdisc); + spin_unlock(root_lock); } } void dev_shutdown(struct net_device *dev) { - qdisc_lock_tree(dev); netdev_for_each_tx_queue(dev, shutdown_scheduler_queue, &noop_qdisc); shutdown_scheduler_queue(dev, &dev->rx_queue, NULL); BUG_TRAP(!timer_pending(&dev->watchdog_timer)); - qdisc_unlock_tree(dev); }