net: ovs: use kfree_rcu instead of rcu_free_{sw_flow_mask_cb,acts_callback}
authorDaniel Borkmann <dborkman@redhat.com>
Tue, 10 Dec 2013 11:02:03 +0000 (12:02 +0100)
committerJesse Gross <jesse@nicira.com>
Mon, 6 Jan 2014 23:52:30 +0000 (15:52 -0800)
As we're only doing a kfree() anyway in the RCU callback, we can
simply use kfree_rcu, which does the same job, and remove the
function rcu_free_sw_flow_mask_cb() and rcu_free_acts_callback().

Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
net/openvswitch/flow_netlink.c
net/openvswitch/flow_table.c

index 3ccb92f..4d000ac 100644 (file)
@@ -1176,19 +1176,11 @@ struct sw_flow_actions *ovs_nla_alloc_flow_actions(int size)
        return sfa;
 }
 
-/* RCU callback used by ovs_nla_free_flow_actions. */
-static void rcu_free_acts_callback(struct rcu_head *rcu)
-{
-       struct sw_flow_actions *sf_acts = container_of(rcu,
-                       struct sw_flow_actions, rcu);
-       kfree(sf_acts);
-}
-
 /* Schedules 'sf_acts' to be freed after the next RCU grace period.
  * The caller must hold rcu_read_lock for this to be sensible. */
 void ovs_nla_free_flow_actions(struct sw_flow_actions *sf_acts)
 {
-       call_rcu(&sf_acts->rcu, rcu_free_acts_callback);
+       kfree_rcu(sf_acts, rcu);
 }
 
 static struct nlattr *reserve_sfa_size(struct sw_flow_actions **sfa,
index 299ea8b..099a1a9 100644 (file)
@@ -155,13 +155,6 @@ static void rcu_free_flow_callback(struct rcu_head *rcu)
        flow_free(flow);
 }
 
-static void rcu_free_sw_flow_mask_cb(struct rcu_head *rcu)
-{
-       struct sw_flow_mask *mask = container_of(rcu, struct sw_flow_mask, rcu);
-
-       kfree(mask);
-}
-
 static void flow_mask_del_ref(struct sw_flow_mask *mask, bool deferred)
 {
        if (!mask)
@@ -173,7 +166,7 @@ static void flow_mask_del_ref(struct sw_flow_mask *mask, bool deferred)
        if (!mask->ref_count) {
                list_del_rcu(&mask->list);
                if (deferred)
-                       call_rcu(&mask->rcu, rcu_free_sw_flow_mask_cb);
+                       kfree_rcu(mask, rcu);
                else
                        kfree(mask);
        }