sch_mqprio: Always set num_tc to 0 in mqprio_destroy()
authorBen Hutchings <bhutchings@solarflare.com>
Mon, 14 Feb 2011 19:02:23 +0000 (19:02 +0000)
committerBen Hutchings <bhutchings@solarflare.com>
Mon, 14 Feb 2011 19:07:58 +0000 (19:07 +0000)
All the cleanup code in mqprio_destroy() is currently conditional on
priv->qdiscs being non-null, but that condition should only apply to
the per-queue qdisc cleanup.  We should always set the number of
traffic classes back to 0 here.

Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
net/sched/sch_mqprio.c

index effd4ee0e88066cf2a34460266fcb842a5fda852..ace37f9f1cd05383d9dddd0cfbec73531676a959 100644 (file)
@@ -29,18 +29,18 @@ static void mqprio_destroy(struct Qdisc *sch)
        struct mqprio_sched *priv = qdisc_priv(sch);
        unsigned int ntx;
 
-       if (!priv->qdiscs)
-               return;
-
-       for (ntx = 0; ntx < dev->num_tx_queues && priv->qdiscs[ntx]; ntx++)
-               qdisc_destroy(priv->qdiscs[ntx]);
+       if (priv->qdiscs) {
+               for (ntx = 0;
+                    ntx < dev->num_tx_queues && priv->qdiscs[ntx];
+                    ntx++)
+                       qdisc_destroy(priv->qdiscs[ntx]);
+               kfree(priv->qdiscs);
+       }
 
        if (priv->hw_owned && dev->netdev_ops->ndo_setup_tc)
                dev->netdev_ops->ndo_setup_tc(dev, 0);
        else
                netdev_set_num_tc(dev, 0);
-
-       kfree(priv->qdiscs);
 }
 
 static int mqprio_parse_opt(struct net_device *dev, struct tc_mqprio_qopt *qopt)