diff options
author | Stephen Hemminger <shemminger@osdl.org> | 2006-11-07 14:54:46 -0800 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-11-07 15:10:12 -0800 |
commit | da33e3eb4876c43b78fdc7b7068653239f28714a (patch) | |
tree | 2e7f0d60e32be15dcf907058ea4996a8369e3664 /net | |
parent | 9e950efa20dc8037c27509666cba6999da9368e8 (diff) | |
download | linux-stable-da33e3eb4876c43b78fdc7b7068653239f28714a.tar.gz linux-stable-da33e3eb4876c43b78fdc7b7068653239f28714a.tar.bz2 linux-stable-da33e3eb4876c43b78fdc7b7068653239f28714a.zip |
[PKT_SCHED] sch_htb: Use hlist_del_init().
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/sched/sch_htb.c | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 9b9c555c713f..4b52fa78935a 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c @@ -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); |