net: sched: flower: set unlocked flag for flower proto ops
authorVlad Buslov <vladbu@mellanox.com>
Thu, 21 Mar 2019 13:17:44 +0000 (15:17 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 21 Mar 2019 21:32:17 +0000 (14:32 -0700)
Set TCF_PROTO_OPS_DOIT_UNLOCKED for flower classifier to indicate that its
ops callbacks don't require caller to hold rtnl lock. Don't take rtnl lock
in fl_destroy_filter_work() that is executed on workqueue instead of being
called by cls API and is not affected by setting
TCF_PROTO_OPS_DOIT_UNLOCKED. Rtnl mutex is still manually taken by flower
classifier before calling hardware offloads API that has not been updated
for unlocked execution.

Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Reviewed-by: Stefano Brivio <sbrivio@redhat.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_flower.c

index 68bac80..0638f17 100644 (file)
@@ -368,9 +368,7 @@ static void fl_destroy_filter_work(struct work_struct *work)
        struct cls_fl_filter *f = container_of(to_rcu_work(work),
                                        struct cls_fl_filter, rwork);
 
-       rtnl_lock();
        __fl_destroy_filter(f);
-       rtnl_unlock();
 }
 
 static void fl_hw_destroy_filter(struct tcf_proto *tp, struct cls_fl_filter *f,
@@ -2372,6 +2370,7 @@ static struct tcf_proto_ops cls_fl_ops __read_mostly = {
        .tmplt_destroy  = fl_tmplt_destroy,
        .tmplt_dump     = fl_tmplt_dump,
        .owner          = THIS_MODULE,
+       .flags          = TCF_PROTO_OPS_DOIT_UNLOCKED,
 };
 
 static int __init cls_fl_init(void)