diff options
| author | Daniel Borkmann <dborkman@redhat.com> | 2013-12-10 06:02:03 -0500 |
|---|---|---|
| committer | Jesse Gross <jesse@nicira.com> | 2014-01-06 18:52:30 -0500 |
| commit | 11d6c461b32a3fb7e89f91ef7fa54c5446335a9c (patch) | |
| tree | ec54a0d617eaa9f1bdc81acb7349b4999b43bd5a | |
| parent | e298e505700604c97e6a9edb21cebb080bdb91f6 (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>
| -rw-r--r-- | net/openvswitch/flow_netlink.c | 10 | ||||
| -rw-r--r-- | net/openvswitch/flow_table.c | 9 |
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. */ | ||
| 1180 | static 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. */ |
| 1189 | void ovs_nla_free_flow_actions(struct sw_flow_actions *sf_acts) | 1181 | void 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 | ||
| 1194 | static struct nlattr *reserve_sfa_size(struct sw_flow_actions **sfa, | 1186 | static 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 | ||
| 158 | static 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 | |||
| 165 | static void flow_mask_del_ref(struct sw_flow_mask *mask, bool deferred) | 158 | static 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 | } |
