Subject: Re: 2.6: QoS scheduling not working with IP-over-IP

From: Patrick McHardy <[email-masked]>
Date: Wed, 18 Feb 2004 12:21:22 +0100

David S. Miller wrote:
> On Sun, 15 Feb 2004 11:30:05 +0100
> Patrick McHardy <[email-masked]> wrote:
> 
> 
>>I guess he meant something like this, but I still think it encourages
>>broken configurations in combination with non-work-conserving
>>schedulers.
> 
> 
> Patrick, "(x || 1)" is not the same as "(x ? x : 1)"
> :-)

Doh! I must have been programming in perl before .. ;)

> Please make a new patch.

Attached.

Regards
Patrick
===== net/sched/sch_fifo.c 1.7 vs edited =====
--- 1.7/net/sched/sch_fifo.c	Wed Nov 19 02:37:34 2003
+++ edited/net/sched/sch_fifo.c	Wed Feb 18 12:06:06 2004
@@ -141,10 +141,12 @@
 	struct fifo_sched_data *q = (void*)sch->data;
 
 	if (opt == NULL) {
+		unsigned int limit = sch->dev->tx_queue_len ? : 1;
+
 		if (sch->ops == &bfifo_qdisc_ops)
-			q->limit = sch->dev->tx_queue_len*sch->dev->mtu;
+			q->limit = limit*sch->dev->mtu;
 		else	
-			q->limit = sch->dev->tx_queue_len;
+			q->limit = limit;
 	} else {
 		struct tc_fifo_qopt *ctl = RTA_DATA(opt);
 		if (opt->rta_len < RTA_LENGTH(sizeof(*ctl)))
===== net/sched/sch_gred.c 1.13 vs edited =====
--- 1.13/net/sched/sch_gred.c	Wed Nov 19 02:37:34 2003
+++ edited/net/sched/sch_gred.c	Wed Feb 18 12:06:56 2004
@@ -110,7 +110,7 @@
 	unsigned long	qave=0;	
 	int i=0;
 
-	if (!t->initd && skb_queue_len(&sch->q) < sch->dev->tx_queue_len) {
+	if (!t->initd && skb_queue_len(&sch->q) < (sch->dev->tx_queue_len ? : 1)) {
 		D2PRINTK("NO GRED Queues setup yet! Enqueued anyway\n");
 		goto do_enqueue;
 	}