Thread (1 message) 1 message, 1 author, 2008-08-07

Re: [PATCH] net: trap attempts to modify noop qdisc

From: Stephen Hemminger <hidden>
Date: 2008-08-07 17:22:45

On Wed, 06 Aug 2008 23:37:03 -0700 (PDT)
David Miller [off-list ref] wrote:
quoted hunk
From: Stephen Hemminger <redacted>
Date: Wed, 6 Aug 2008 23:15:16 -0700
quoted
On Wed, 06 Aug 2008 23:11:59 -0700 (PDT)
David Miller [off-list ref] wrote:
quoted
From: Stephen Hemminger <redacted>
Date: Wed, 6 Aug 2008 23:08:50 -0700
quoted
Since noop qdisc is a singleton, it shouldn't end up with any other
qdisc's on it's list, and it shouldn't be deleted.

Dave, this should help you find the bug.
Thanks.
I think the root of your problem (bad pun) is that the new code
is assuming that changes to the root are done with parent handle of 0,
but the API is for the parent handle to be TC_H_ROOT (0xFFFFFFFFU).
This is what I just committed to net-2.6, please give it a whirl.

pkt_sched: Fix "parent is root" test in qdisc_create().

As noticed by Stephen Hemminger, the root qdisc is denoted by
TC_H_ROOT, not zero.

Signed-off-by: David S. Miller <davem@davemloft.net>
---
 net/sched/sch_api.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 4840aff..83b23b5 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -792,7 +792,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
 				goto err_out3;
 			}
 		}
-		if (parent && !(sch->flags & TCQ_F_INGRESS))
+		if ((parent != TC_H_ROOT) && !(sch->flags & TCQ_F_INGRESS))
 			list_add_tail(&sch->list, &dev_queue->qdisc->list);
 
 		return sch;
Thanks, that fixes it.

You still might want to add a BUG_ON there for anything that is internal qdisc.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help