Subject: Re: HTB/act_mirred problem [was: one more... iproute commands lockup whole system]

From: Patrick McHardy <[email-masked]>
Date: Wed, 04 Apr 2007 16:13:07 +0200

Denys wrote:
> I have some interesting thing:
> 
> Rules:
> tc qdisc del dev eth0.5 root
> tc qdisc add dev eth0.5 handle 1: root htb
> tc class add dev eth0.5 parent 1:0 classid 1:2 htb rate 128Kbit
> 
> tc qdisc add dev eth0.5 parent 1:2 handle 2: prio
> 
> tc filter add dev eth0.5 parent 1: protocol ip prio 10 u32 \
> match ip src 195.69.208.253/32 flowid 1:2
> 
> tc filter add dev eth0.5 parent 2: protocol ip prio 10 u32 \
>     match ip src 195.69.208.253/32 flowid 2:1 \
>     action mirred egress redirect dev eth0.6
> 
> (it is not working, but just i tried few things)
> 
> At morning i wakeup and see in dmesg, also not sure if it's bug or result of 
> misconfiguration:
> 
> [46632.941527] KERNEL: assertion (!cl->level && cl->un.leaf.q && cl-
> 
>>un.leaf.q->q.qlen) failed at net/sched/sch_htb.c (585)

This seems to be due to be caused by act_mirred returning TC_ACT_STOLEN,
which is translated to NET_XMIT_SUCCESS within prio, causing HTB to
increase the q.qlen counter and activating the class despite no packet
beeing queued.

Jamal, we can't return NET_XMIT_SUCCESS unless we've really queued the
packet. I can't remeber the reason why this is done, could you remind
me?