patch-2.4.25 linux-2.4.25/net/sched/sch_tbf.c
Next file: linux-2.4.25/net/sctp/associola.c
Previous file: linux-2.4.25/net/sched/sch_sfq.c
Back to the patch index
Back to the overall index
- Lines: 82
- Date:
2004-02-18 05:36:32.000000000 -0800
- Orig file:
linux-2.4.24/net/sched/sch_tbf.c
- Orig date:
2003-08-25 04:44:44.000000000 -0700
diff -urN linux-2.4.24/net/sched/sch_tbf.c linux-2.4.25/net/sched/sch_tbf.c
@@ -108,6 +108,10 @@
Note that the peak rate TBF is much more tough: with MTU 1500
P_crit = 150Kbytes/sec. So, if you need greater peak
rates, use alpha with HZ=1000 :-)
+
+ With classful TBF, limit is just kept for backwards compatibility.
+ It is passed to the default bfifo qdisc - if the inner qdisc is
+ changed the limit is not effective anymore.
*/
struct tbf_sched_data
@@ -136,7 +140,7 @@
struct tbf_sched_data *q = (struct tbf_sched_data *)sch->data;
int ret;
- if (skb->len > q->max_size || sch->stats.backlog + skb->len > q->limit) {
+ if (skb->len > q->max_size) {
sch->stats.drops++;
#ifdef CONFIG_NET_CLS_POLICE
if (sch->reshape_fail == NULL || sch->reshape_fail(skb, sch))
@@ -152,7 +156,6 @@
}
sch->q.qlen++;
- sch->stats.backlog += skb->len;
sch->stats.bytes += skb->len;
sch->stats.packets++;
return 0;
@@ -163,10 +166,8 @@
struct tbf_sched_data *q = (struct tbf_sched_data *)sch->data;
int ret;
- if ((ret = q->qdisc->ops->requeue(skb, q->qdisc)) == 0) {
+ if ((ret = q->qdisc->ops->requeue(skb, q->qdisc)) == 0)
sch->q.qlen++;
- sch->stats.backlog += skb->len;
- }
return ret;
}
@@ -178,7 +179,6 @@
if ((len = q->qdisc->ops->drop(q->qdisc)) != 0) {
sch->q.qlen--;
- sch->stats.backlog -= len;
sch->stats.drops++;
}
return len;
@@ -224,7 +224,6 @@
q->t_c = now;
q->tokens = toks;
q->ptokens = ptoks;
- sch->stats.backlog -= len;
sch->q.qlen--;
sch->flags &= ~TCQ_F_THROTTLED;
return skb;
@@ -253,7 +252,6 @@
if (q->qdisc->ops->requeue(skb, q->qdisc) != NET_XMIT_SUCCESS) {
/* When requeue fails skb is dropped */
sch->q.qlen--;
- sch->stats.backlog -= len;
sch->stats.drops++;
}
@@ -268,8 +266,7 @@
struct tbf_sched_data *q = (struct tbf_sched_data *)sch->data;
qdisc_reset(q->qdisc);
- skb_queue_purge(&sch->q);
- sch->stats.backlog = 0;
+ sch->q.qlen = 0;
PSCHED_GET_TIME(q->t_c);
q->tokens = q->buffer;
q->ptokens = q->mtu;
@@ -463,6 +460,7 @@
sch_tree_lock(sch);
*old = xchg(&q->qdisc, new);
qdisc_reset(*old);
+ sch->q.qlen = 0;
sch_tree_unlock(sch);
return 0;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)