On 06/13/2019 09:06 AM, Vlad Buslov wrote: > On Wed 12 Jun 2019 at 19:33, Daniel Borkmann <dan...@iogearbox.net> wrote: >> On 06/12/2019 09:14 AM, Vlad Buslov wrote: >>> To remove rtnl lock dependency in tc filter update API when using ingress >>> Qdisc, set QDISC_CLASS_OPS_DOIT_UNLOCKED flag in ingress Qdisc_class_ops. >>> >>> Ingress Qdisc ops don't require any modifications to be used without rtnl >>> lock on tc filter update path. Ingress implementation never changes its >>> q->block and only releases it when Qdisc is being destroyed. This means it >>> is enough for RTM_{NEWTFILTER|DELTFILTER|GETTFILTER} message handlers to >>> hold ingress Qdisc reference while using it without relying on rtnl lock >>> protection. Unlocked Qdisc ops support is already implemented in filter >>> update path by unlocked cls API patch set. >>> >>> Signed-off-by: Vlad Buslov <vla...@mellanox.com> >>> --- >>> net/sched/sch_ingress.c | 1 + >>> 1 file changed, 1 insertion(+) >>> >>> diff --git a/net/sched/sch_ingress.c b/net/sched/sch_ingress.c >>> index 0f65f617756b..d5382554e281 100644 >>> --- a/net/sched/sch_ingress.c >>> +++ b/net/sched/sch_ingress.c >>> @@ -114,6 +114,7 @@ static int ingress_dump(struct Qdisc *sch, struct >>> sk_buff *skb) >>> } >>> >>> static const struct Qdisc_class_ops ingress_class_ops = { >>> + .flags = QDISC_CLASS_OPS_DOIT_UNLOCKED, >>> .leaf = ingress_leaf, >>> .find = ingress_find, >>> .walk = ingress_walk, >>> >> >> Vlad, why is clsact_class_ops not updated here? Please elaborate! > > Daniel, no particular reason to not enable unlocked execution for > clsact. I set the unlocked flag for ingress because that was the Qdisc > that I tested all my parallel tc changes on. However, ingress and clsact > implementations are quite similar, so I can send a followup patch that > updates clsact_class_ops, if you want.
Yes, please do, they are pretty much the same except that clsact supersedes ingress in that it also offers an egress hook.