diff options
Diffstat (limited to 'net/sched/cls_api.c')
| -rw-r--r-- | net/sched/cls_api.c | 36 | 
1 files changed, 7 insertions, 29 deletions
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 6a0eacafdb19..c2cdd0fc2e70 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -308,33 +308,12 @@ static void tcf_proto_put(struct tcf_proto *tp, bool rtnl_held,  		tcf_proto_destroy(tp, rtnl_held, true, extack);  } -static int walker_check_empty(struct tcf_proto *tp, void *fh, -			      struct tcf_walker *arg) +static bool tcf_proto_check_delete(struct tcf_proto *tp)  { -	if (fh) { -		arg->nonempty = true; -		return -1; -	} -	return 0; -} - -static bool tcf_proto_is_empty(struct tcf_proto *tp, bool rtnl_held) -{ -	struct tcf_walker walker = { .fn = walker_check_empty, }; - -	if (tp->ops->walk) { -		tp->ops->walk(tp, &walker, rtnl_held); -		return !walker.nonempty; -	} -	return true; -} +	if (tp->ops->delete_empty) +		return tp->ops->delete_empty(tp); -static bool tcf_proto_check_delete(struct tcf_proto *tp, bool rtnl_held) -{ -	spin_lock(&tp->lock); -	if (tcf_proto_is_empty(tp, rtnl_held)) -		tp->deleting = true; -	spin_unlock(&tp->lock); +	tp->deleting = true;  	return tp->deleting;  } @@ -1751,7 +1730,7 @@ static void tcf_chain_tp_delete_empty(struct tcf_chain *chain,  	 * concurrently.  	 * Mark tp for deletion if it is empty.  	 */ -	if (!tp_iter || !tcf_proto_check_delete(tp, rtnl_held)) { +	if (!tp_iter || !tcf_proto_check_delete(tp)) {  		mutex_unlock(&chain->filter_chain_lock);  		return;  	} @@ -2076,9 +2055,8 @@ replay:  							       &chain_info));  		mutex_unlock(&chain->filter_chain_lock); -		tp_new = tcf_proto_create(nla_data(tca[TCA_KIND]), -					  protocol, prio, chain, rtnl_held, -					  extack); +		tp_new = tcf_proto_create(name, protocol, prio, chain, +					  rtnl_held, extack);  		if (IS_ERR(tp_new)) {  			err = PTR_ERR(tp_new);  			goto errout_tp;  | 

