[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