|
@@ -1265,7 +1265,7 @@ static size_t ovs_dp_cmd_msg_size(void)
|
|
|
return msgsize;
|
|
|
}
|
|
|
|
|
|
-/* Called with ovs_mutex or RCU read lock. */
|
|
|
+/* Called with ovs_mutex. */
|
|
|
static int ovs_dp_cmd_fill_info(struct datapath *dp, struct sk_buff *skb,
|
|
|
u32 portid, u32 seq, u32 flags, u8 cmd)
|
|
|
{
|
|
@@ -1555,7 +1555,7 @@ static int ovs_dp_cmd_get(struct sk_buff *skb, struct genl_info *info)
|
|
|
if (!reply)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- rcu_read_lock();
|
|
|
+ ovs_lock();
|
|
|
dp = lookup_datapath(sock_net(skb->sk), info->userhdr, info->attrs);
|
|
|
if (IS_ERR(dp)) {
|
|
|
err = PTR_ERR(dp);
|
|
@@ -1564,12 +1564,12 @@ static int ovs_dp_cmd_get(struct sk_buff *skb, struct genl_info *info)
|
|
|
err = ovs_dp_cmd_fill_info(dp, reply, info->snd_portid,
|
|
|
info->snd_seq, 0, OVS_DP_CMD_NEW);
|
|
|
BUG_ON(err < 0);
|
|
|
- rcu_read_unlock();
|
|
|
+ ovs_unlock();
|
|
|
|
|
|
return genlmsg_reply(reply, info);
|
|
|
|
|
|
err_unlock_free:
|
|
|
- rcu_read_unlock();
|
|
|
+ ovs_unlock();
|
|
|
kfree_skb(reply);
|
|
|
return err;
|
|
|
}
|
|
@@ -1581,8 +1581,8 @@ static int ovs_dp_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
|
|
int skip = cb->args[0];
|
|
|
int i = 0;
|
|
|
|
|
|
- rcu_read_lock();
|
|
|
- list_for_each_entry_rcu(dp, &ovs_net->dps, list_node) {
|
|
|
+ ovs_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,
|
|
|
cb->nlh->nlmsg_seq, NLM_F_MULTI,
|
|
@@ -1590,7 +1590,7 @@ static int ovs_dp_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
|
|
break;
|
|
|
i++;
|
|
|
}
|
|
|
- rcu_read_unlock();
|
|
|
+ ovs_unlock();
|
|
|
|
|
|
cb->args[0] = i;
|
|
|
|