cls_u32: complete the check for non-forced case in u32_destroy()
authorWANG Cong <xiyou.wangcong@gmail.com>
Tue, 25 Aug 2015 23:38:12 +0000 (16:38 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 26 Aug 2015 00:02:48 +0000 (17:02 -0700)
commita6c1aea044e490da3e59124ec55991fe316818d5
tree80260a1e1e08d619e508574bc5ef407755b3ab15
parentaac27c7a0d76683f7f4bdf41cec174db2819f635
cls_u32: complete the check for non-forced case in u32_destroy()

In commit 1e052be69d04 ("net_sched: destroy proto tp when all filters are gone")
I added a check in u32_destroy() to see if all real filters are gone
for each tp, however, that is only done for root_ht, same is needed
for others.

This can be reproduced by the following tc commands:

tc filter add dev eth0 parent 1:0 prio 5 handle 15: protocol ip u32 divisor 256
tc filter add dev eth0 protocol ip parent 1: prio 5 handle 15:2:2 u32
ht 15:2: match ip src 10.0.0.2 flowid 1:10
tc filter add dev eth0 protocol ip parent 1: prio 5 handle 15:2:3 u32
ht 15:2: match ip src 10.0.0.3 flowid 1:10

Fixes: 1e052be69d04 ("net_sched: destroy proto tp when all filters are gone")
Reported-by: Akshat Kakkar <akshat.1984@gmail.com>
Cc: Jamal Hadi Salim <jhs@mojatatu.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: Cong Wang <cwang@twopensource.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_u32.c