diff options
| author | Patrick McHardy <kaber@trash.net> | 2006-03-20 19:01:38 -0800 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2006-03-20 19:01:38 -0800 | 
| commit | f5539eb8caa52a9198079df767cc1bb5494e69e3 (patch) | |
| tree | fa24490b12273384dfced2f664090b7fbf469e1e | |
| parent | 053cfed75d9e01bda274c5b0126f5937181dcb62 (diff) | |
| download | olio-linux-3.10-f5539eb8caa52a9198079df767cc1bb5494e69e3.tar.xz olio-linux-3.10-f5539eb8caa52a9198079df767cc1bb5494e69e3.zip  | |
[PKT_SCHED]: Keep backlog counter in sch_sfq
Keep backlog counter in SFQ qdisc to make it usable as child qdisc
with RED.
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | net/sched/sch_sfq.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c index 86d8da0cbd0..e057768f68b 100644 --- a/net/sched/sch_sfq.c +++ b/net/sched/sch_sfq.c @@ -232,6 +232,7 @@ static unsigned int sfq_drop(struct Qdisc *sch)  		sfq_dec(q, x);  		sch->q.qlen--;  		sch->qstats.drops++; +		sch->qstats.backlog -= len;  		return len;  	} @@ -248,6 +249,7 @@ static unsigned int sfq_drop(struct Qdisc *sch)  		sch->q.qlen--;  		q->ht[q->hash[d]] = SFQ_DEPTH;  		sch->qstats.drops++; +		sch->qstats.backlog -= len;  		return len;  	} @@ -266,6 +268,7 @@ sfq_enqueue(struct sk_buff *skb, struct Qdisc* sch)  		q->ht[hash] = x = q->dep[SFQ_DEPTH].next;  		q->hash[x] = hash;  	} +	sch->qstats.backlog += skb->len;  	__skb_queue_tail(&q->qs[x], skb);  	sfq_inc(q, x);  	if (q->qs[x].qlen == 1) {		/* The flow is new */ @@ -301,6 +304,7 @@ sfq_requeue(struct sk_buff *skb, struct Qdisc* sch)  		q->ht[hash] = x = q->dep[SFQ_DEPTH].next;  		q->hash[x] = hash;  	} +	sch->qstats.backlog += skb->len;  	__skb_queue_head(&q->qs[x], skb);  	sfq_inc(q, x);  	if (q->qs[x].qlen == 1) {		/* The flow is new */ @@ -344,6 +348,7 @@ sfq_dequeue(struct Qdisc* sch)  	skb = __skb_dequeue(&q->qs[a]);  	sfq_dec(q, a);  	sch->q.qlen--; +	sch->qstats.backlog -= skb->len;  	/* Is the slot empty? */  	if (q->qs[a].qlen == 0) {  |