[ovs-dev] [PATCH 2/2] datapath: Use rcu_read_lock() for "get" commands.

Jarno Rajahalme jrajahalme at nicira.com
Tue Feb 4 19:10:43 UTC 2014


Change ovs_dp_cmd_get() and ovs_flow_cmd_get() to only take the
rcu_read_lock(), instead of ovs_lock(), as nothing need to be changed.
This was done by ovs_vport_cmd_get() already.

Signed-off-by: Jarno Rajahalme <jrajahalme at nicira.com>
---
 datapath/datapath.c |   17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/datapath/datapath.c b/datapath/datapath.c
index 7992330..bafe486 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -918,29 +918,27 @@ static int ovs_flow_cmd_get(struct sk_buff *skb, struct genl_info *info)
 	if (err)
 		return err;
 
-	ovs_lock();
+	rcu_read_lock();
 	dp = get_dp(sock_net(skb->sk), ovs_header->dp_ifindex);
 	if (!dp) {
 		err = -ENODEV;
 		goto unlock;
 	}
-
 	flow = ovs_flow_tbl_lookup(&dp->table, &key);
 	if (!flow || !ovs_flow_cmp_unmasked_key(flow, &match)) {
 		err = -ENOENT;
 		goto unlock;
 	}
-
 	reply = ovs_flow_cmd_build_info(flow, dp, info, OVS_FLOW_CMD_NEW);
 	if (IS_ERR(reply)) {
 		err = PTR_ERR(reply);
 		goto unlock;
 	}
+	rcu_read_unlock();
 
-	ovs_unlock();
 	return genlmsg_reply(reply, info);
 unlock:
-	ovs_unlock();
+	rcu_read_unlock();
 	return err;
 }
 
@@ -1384,24 +1382,23 @@ static int ovs_dp_cmd_get(struct sk_buff *skb, struct genl_info *info)
 	struct datapath *dp;
 	int err;
 
-	ovs_lock();
+	rcu_read_lock();
 	dp = lookup_datapath(sock_net(skb->sk), info->userhdr, info->attrs);
 	if (IS_ERR(dp)) {
 		err = PTR_ERR(dp);
 		goto unlock;
 	}
-
 	reply = ovs_dp_cmd_build_info(dp, info, OVS_DP_CMD_NEW);
 	if (IS_ERR(reply)) {
 		err = PTR_ERR(reply);
 		goto unlock;
 	}
+	rcu_read_unlock();
 
-	ovs_unlock();
 	return genlmsg_reply(reply, info);
 
 unlock:
-	ovs_unlock();
+	rcu_read_unlock();
 	return err;
 }
 
@@ -1741,13 +1738,11 @@ static int ovs_vport_cmd_get(struct sk_buff *skb, struct genl_info *info)
 	err = PTR_ERR(vport);
 	if (IS_ERR(vport))
 		goto exit_unlock;
-
 	reply = ovs_vport_cmd_build_info(vport, info->snd_portid,
 					 info->snd_seq, OVS_VPORT_CMD_NEW);
 	err = PTR_ERR(reply);
 	if (IS_ERR(reply))
 		goto exit_unlock;
-
 	rcu_read_unlock();
 
 	return genlmsg_reply(reply, info);
-- 
1.7.10.4




More information about the dev mailing list