aboutsummaryrefslogtreecommitdiffstats
path: root/net/openvswitch
diff options
context:
space:
mode:
Diffstat (limited to 'net/openvswitch')
-rw-r--r--net/openvswitch/flow.c10
1 files changed, 1 insertions, 9 deletions
diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c
index b7f38b161909..c7bf2f26525a 100644
--- a/net/openvswitch/flow.c
+++ b/net/openvswitch/flow.c
@@ -427,19 +427,11 @@ void ovs_flow_deferred_free(struct sw_flow *flow)
427 call_rcu(&flow->rcu, rcu_free_flow_callback); 427 call_rcu(&flow->rcu, rcu_free_flow_callback);
428} 428}
429 429
430/* RCU callback used by ovs_flow_deferred_free_acts. */
431static void rcu_free_acts_callback(struct rcu_head *rcu)
432{
433 struct sw_flow_actions *sf_acts = container_of(rcu,
434 struct sw_flow_actions, rcu);
435 kfree(sf_acts);
436}
437
438/* Schedules 'sf_acts' to be freed after the next RCU grace period. 430/* Schedules 'sf_acts' to be freed after the next RCU grace period.
439 * The caller must hold rcu_read_lock for this to be sensible. */ 431 * The caller must hold rcu_read_lock for this to be sensible. */
440void ovs_flow_deferred_free_acts(struct sw_flow_actions *sf_acts) 432void ovs_flow_deferred_free_acts(struct sw_flow_actions *sf_acts)
441{ 433{
442 call_rcu(&sf_acts->rcu, rcu_free_acts_callback); 434 kfree_rcu(sf_acts, rcu);
443} 435}
444 436
445static int parse_vlan(struct sk_buff *skb, struct sw_flow_key *key) 437static int parse_vlan(struct sk_buff *skb, struct sw_flow_key *key)