diff options
Diffstat (limited to 'net/sched/cls_route.c')
| -rw-r--r-- | net/sched/cls_route.c | 21 | 
1 files changed, 10 insertions, 11 deletions
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c index 0404aa5fa7cb..f006af23b64a 100644 --- a/net/sched/cls_route.c +++ b/net/sched/cls_route.c @@ -276,7 +276,8 @@ static void route4_queue_work(struct route4_filter *f)  	tcf_queue_work(&f->rwork, route4_delete_filter_work);  } -static void route4_destroy(struct tcf_proto *tp, struct netlink_ext_ack *extack) +static void route4_destroy(struct tcf_proto *tp, bool rtnl_held, +			   struct netlink_ext_ack *extack)  {  	struct route4_head *head = rtnl_dereference(tp->root);  	int h1, h2; @@ -312,7 +313,7 @@ static void route4_destroy(struct tcf_proto *tp, struct netlink_ext_ack *extack)  }  static int route4_delete(struct tcf_proto *tp, void *arg, bool *last, -			 struct netlink_ext_ack *extack) +			 bool rtnl_held, struct netlink_ext_ack *extack)  {  	struct route4_head *head = rtnl_dereference(tp->root);  	struct route4_filter *f = arg; @@ -393,7 +394,7 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,  	struct route4_bucket *b;  	int err; -	err = tcf_exts_validate(net, tp, tb, est, &f->exts, ovr, extack); +	err = tcf_exts_validate(net, tp, tb, est, &f->exts, ovr, true, extack);  	if (err < 0)  		return err; @@ -468,7 +469,7 @@ static int route4_set_parms(struct net *net, struct tcf_proto *tp,  static int route4_change(struct net *net, struct sk_buff *in_skb,  			 struct tcf_proto *tp, unsigned long base, u32 handle,  			 struct nlattr **tca, void **arg, bool ovr, -			 struct netlink_ext_ack *extack) +			 bool rtnl_held, struct netlink_ext_ack *extack)  {  	struct route4_head *head = rtnl_dereference(tp->root);  	struct route4_filter __rcu **fp; @@ -496,7 +497,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,  	if (!f)  		goto errout; -	err = tcf_exts_init(&f->exts, TCA_ROUTE4_ACT, TCA_ROUTE4_POLICE); +	err = tcf_exts_init(&f->exts, net, TCA_ROUTE4_ACT, TCA_ROUTE4_POLICE);  	if (err < 0)  		goto errout; @@ -560,15 +561,13 @@ errout:  	return err;  } -static void route4_walk(struct tcf_proto *tp, struct tcf_walker *arg) +static void route4_walk(struct tcf_proto *tp, struct tcf_walker *arg, +			bool rtnl_held)  {  	struct route4_head *head = rtnl_dereference(tp->root);  	unsigned int h, h1; -	if (head == NULL) -		arg->stop = 1; - -	if (arg->stop) +	if (head == NULL || arg->stop)  		return;  	for (h = 0; h <= 256; h++) { @@ -597,7 +596,7 @@ static void route4_walk(struct tcf_proto *tp, struct tcf_walker *arg)  }  static int route4_dump(struct net *net, struct tcf_proto *tp, void *fh, -		       struct sk_buff *skb, struct tcmsg *t) +		       struct sk_buff *skb, struct tcmsg *t, bool rtnl_held)  {  	struct route4_filter *f = fh;  	struct nlattr *nest;  |