RCUfy dp-dump operation which is already read-only. This makes all ovs dump operations lockless.
Signed-off-by: Pravin B Shelar <pshe...@nicira.com> --- datapath/datapath.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff --git a/datapath/datapath.c b/datapath/datapath.c index 2f02f71..09367cf 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -972,9 +972,10 @@ static struct genl_ops dp_packet_genl_ops[] = { static void get_dp_stats(struct datapath *dp, struct ovs_dp_stats *stats) { + struct flow_table *table; int i; - struct flow_table *table = ovsl_dereference(dp->table); + table = rcu_dereference_check(dp->table, lockdep_ovsl_is_held()); stats->n_flows = ovs_flow_tbl_count(table); stats->n_hit = stats->n_missed = stats->n_lost = 0; @@ -1902,7 +1903,7 @@ static int ovs_dp_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb) int skip = cb->args[0]; int i = 0; - ovs_lock(); + rcu_read_lock(); list_for_each_entry(dp, &ovs_net->dps, list_node) { if (i >= skip && ovs_dp_cmd_fill_info(dp, skb, NETLINK_CB(cb->skb).portid, @@ -1911,7 +1912,7 @@ static int ovs_dp_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb) break; i++; } - ovs_unlock(); + rcu_read_unlock(); cb->args[0] = i; -- 1.7.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev