X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fsched%2Fsch_tbf.c;fp=net%2Fsched%2Fsch_tbf.c;h=cb9711ea8c6cac3a4f2c4f568a454fadfd30287a;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=d9a5d298d755539443fa2a618ff70ba4863126da;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index d9a5d298d..cb9711ea8 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c @@ -12,6 +12,7 @@ * */ +#include #include #include #include @@ -176,9 +177,9 @@ static int tbf_requeue(struct sk_buff *skb, struct Qdisc* sch) static unsigned int tbf_drop(struct Qdisc* sch) { struct tbf_sched_data *q = qdisc_priv(sch); - unsigned int len = 0; + unsigned int len; - if (q->qdisc->ops->drop && (len = q->qdisc->ops->drop(q->qdisc)) != 0) { + if ((len = q->qdisc->ops->drop(q->qdisc)) != 0) { sch->q.qlen--; sch->qstats.drops++; } @@ -340,14 +341,13 @@ static int tbf_change(struct Qdisc* sch, struct rtattr *opt) if (max_size < 0) goto done; - if (qopt->limit > 0) { + if (q->qdisc == &noop_qdisc) { if ((child = tbf_create_dflt_qdisc(sch->dev, qopt->limit)) == NULL) goto done; } sch_tree_lock(sch); - if (child) - qdisc_destroy(xchg(&q->qdisc, child)); + if (child) q->qdisc = child; q->limit = qopt->limit; q->mtu = qopt->mtu; q->max_size = max_size;