[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>
This commit is contained in:
parent
9e950efa20
commit
da33e3eb48
@ -1284,8 +1284,7 @@ static void htb_destroy_class(struct Qdisc *sch, struct htb_class *cl)
|
|||||||
struct htb_class, sibling));
|
struct htb_class, sibling));
|
||||||
|
|
||||||
/* note: this delete may happen twice (see htb_delete) */
|
/* note: this delete may happen twice (see htb_delete) */
|
||||||
if (!hlist_unhashed(&cl->hlist))
|
hlist_del_init(&cl->hlist);
|
||||||
hlist_del(&cl->hlist);
|
|
||||||
list_del(&cl->sibling);
|
list_del(&cl->sibling);
|
||||||
|
|
||||||
if (cl->prio_activity)
|
if (cl->prio_activity)
|
||||||
@ -1333,8 +1332,7 @@ static int htb_delete(struct Qdisc *sch, unsigned long arg)
|
|||||||
sch_tree_lock(sch);
|
sch_tree_lock(sch);
|
||||||
|
|
||||||
/* delete from hash and active; remainder in destroy_class */
|
/* delete from hash and active; remainder in destroy_class */
|
||||||
if (!hlist_unhashed(&cl->hlist))
|
hlist_del_init(&cl->hlist);
|
||||||
hlist_del(&cl->hlist);
|
|
||||||
|
|
||||||
if (cl->prio_activity)
|
if (cl->prio_activity)
|
||||||
htb_deactivate(q, cl);
|
htb_deactivate(q, cl);
|
||||||
|
Loading…
Reference in New Issue
Block a user