aboutsummaryrefslogtreecommitdiffstats
path: root/net/openvswitch
diff options
context:
space:
mode:
authorDaniel Borkmann <dborkman@redhat.com>2013-12-10 06:02:03 -0500
committerJesse Gross <jesse@nicira.com>2014-01-06 18:52:30 -0500
commit11d6c461b32a3fb7e89f91ef7fa54c5446335a9c (patch)
treeec54a0d617eaa9f1bdc81acb7349b4999b43bd5a /net/openvswitch
parente298e505700604c97e6a9edb21cebb080bdb91f6 (diff)
net: ovs: use kfree_rcu instead of rcu_free_{sw_flow_mask_cb,acts_callback}
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>
Diffstat (limited to 'net/openvswitch')
-rw-r--r--net/openvswitch/flow_netlink.c10
-rw-r--r--net/openvswitch/flow_table.c9
2 files changed, 2 insertions, 17 deletions
diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c
index 3ccb92f48502..4d000acaed0d 100644
--- a/net/openvswitch/flow_netlink.c
+++ b/net/openvswitch/flow_netlink.c
@@ -1176,19 +1176,11 @@ struct sw_flow_actions *ovs_nla_alloc_flow_actions(int size)
1176 return sfa; 1176 return sfa;
1177} 1177}
1178 1178
1179/* RCU callback used by ovs_nla_free_flow_actions. */
1180static void rcu_free_acts_callback(struct rcu_head *rcu)
1181{
1182 struct sw_flow_actions *sf_acts = container_of(rcu,
1183 struct sw_flow_actions, rcu);
1184 kfree(sf_acts);
1185}
1186
1187/* Schedules 'sf_acts' to be freed after the next RCU grace period. 1179/* Schedules 'sf_acts' to be freed after the next RCU grace period.
1188 * The caller must hold rcu_read_lock for this to be sensible. */ 1180 * The caller must hold rcu_read_lock for this to be sensible. */
1189void ovs_nla_free_flow_actions(struct sw_flow_actions *sf_acts) 1181void ovs_nla_free_flow_actions(struct sw_flow_actions *sf_acts)
1190{ 1182{
1191 call_rcu(&sf_acts->rcu, rcu_free_acts_callback); 1183 kfree_rcu(sf_acts, rcu);
1192} 1184}
1193 1185
1194static struct nlattr *reserve_sfa_size(struct sw_flow_actions **sfa, 1186static struct nlattr *reserve_sfa_size(struct sw_flow_actions **sfa,
diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c
index 299ea8bb400c..099a1a9a3068 100644
--- a/net/openvswitch/flow_table.c
+++ b/net/openvswitch/flow_table.c
@@ -155,13 +155,6 @@ static void rcu_free_flow_callback(struct rcu_head *rcu)
155 flow_free(flow); 155 flow_free(flow);
156} 156}
157 157
158static void rcu_free_sw_flow_mask_cb(struct rcu_head *rcu)
159{
160 struct sw_flow_mask *mask = container_of(rcu, struct sw_flow_mask, rcu);
161
162 kfree(mask);
163}
164
165static void flow_mask_del_ref(struct sw_flow_mask *mask, bool deferred) 158static void flow_mask_del_ref(struct sw_flow_mask *mask, bool deferred)
166{ 159{
167 if (!mask) 160 if (!mask)
@@ -173,7 +166,7 @@ static void flow_mask_del_ref(struct sw_flow_mask *mask, bool deferred)
173 if (!mask->ref_count) { 166 if (!mask->ref_count) {
174 list_del_rcu(&mask->list); 167 list_del_rcu(&mask->list);
175 if (deferred) 168 if (deferred)
176 call_rcu(&mask->rcu, rcu_free_sw_flow_mask_cb); 169 kfree_rcu(mask, rcu);
177 else 170 else
178 kfree(mask); 171 kfree(mask);
179 } 172 }