diff options
| -rw-r--r-- | net/sched/sch_htb.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 0db5a6eae87f..722e137df244 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
| @@ -219,11 +219,16 @@ static struct htb_class *htb_classify(struct sk_buff *skb, struct Qdisc *sch, | |||
| 219 | if (skb->priority == sch->handle) | 219 | if (skb->priority == sch->handle) |
| 220 | return HTB_DIRECT; /* X:0 (direct flow) selected */ | 220 | return HTB_DIRECT; /* X:0 (direct flow) selected */ |
| 221 | cl = htb_find(skb->priority, sch); | 221 | cl = htb_find(skb->priority, sch); |
| 222 | if (cl && cl->level == 0) | 222 | if (cl) { |
| 223 | return cl; | 223 | if (cl->level == 0) |
| 224 | return cl; | ||
| 225 | /* Start with inner filter chain if a non-leaf class is selected */ | ||
| 226 | tcf = cl->filter_list; | ||
| 227 | } else { | ||
| 228 | tcf = q->filter_list; | ||
| 229 | } | ||
| 224 | 230 | ||
| 225 | *qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS; | 231 | *qerr = NET_XMIT_SUCCESS | __NET_XMIT_BYPASS; |
| 226 | tcf = q->filter_list; | ||
| 227 | while (tcf && (result = tc_classify(skb, tcf, &res)) >= 0) { | 232 | while (tcf && (result = tc_classify(skb, tcf, &res)) >= 0) { |
| 228 | #ifdef CONFIG_NET_CLS_ACT | 233 | #ifdef CONFIG_NET_CLS_ACT |
| 229 | switch (result) { | 234 | switch (result) { |
