[PKT_SCHED] sch_htb: Use hlist_del_init().
authorStephen Hemminger <shemminger@osdl.org>
Tue, 7 Nov 2006 22:54:46 +0000 (14:54 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Tue, 7 Nov 2006 23:10:12 +0000 (15:10 -0800)
Otherwise we can hit paths that (legally) do multiple deletes on the
same node and OOPS with the HLIST poison values there instead of
NULL.

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

index 9b9c555..4b52fa7 100644 (file)
@@ -1284,8 +1284,7 @@ static void htb_destroy_class(struct Qdisc *sch, struct htb_class *cl)
                                                  struct htb_class, sibling));
 
        /* note: this delete may happen twice (see htb_delete) */
-       if (!hlist_unhashed(&cl->hlist))
-               hlist_del(&cl->hlist);
+       hlist_del_init(&cl->hlist);
        list_del(&cl->sibling);
 
        if (cl->prio_activity)
@@ -1333,8 +1332,7 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
        sch_tree_lock(sch);
 
        /* delete from hash and active; remainder in destroy_class */
-       if (!hlist_unhashed(&cl->hlist))
-               hlist_del(&cl->hlist);
+       hlist_del_init(&cl->hlist);
 
        if (cl->prio_activity)
                htb_deactivate(q, cl);