return dp;
}
-/* Must be called with rcu_read_lock or RTNL lock. */
-static struct vport *get_vport_protected(struct datapath *dp, u16 port_no)
-{
- return rcu_dereference_rtnl(dp->ports[port_no]);
-}
-
/* Must be called with rcu_read_lock or RTNL lock. */
const char *dp_name(const struct datapath *dp)
{
rcu_read_lock();
- local = get_vport_protected(dp, OVSP_LOCAL);
+ local = rcu_dereference(dp->ports[OVSP_LOCAL]);
if (local)
ifindex = local->ops->get_ifindex(local);
else
return 0;
err_destroy_local_port:
- dp_detach_port(get_vport_protected(dp, OVSP_LOCAL));
+ dp_detach_port(rtnl_dereference(dp->ports[OVSP_LOCAL]));
err_destroy_percpu:
free_percpu(dp->stats_percpu);
err_destroy_table:
dp_sysfs_del_dp(dp);
list_del(&dp->list_node);
- dp_detach_port(get_vport_protected(dp, OVSP_LOCAL));
+ dp_detach_port(rtnl_dereference(dp->ports[OVSP_LOCAL]));
/* rtnl_unlock() will wait until all the references to devices that
* are pending unregistration have been dropped. We do it here to
if (!dp)
return ERR_PTR(-ENODEV);
- vport = get_vport_protected(dp, port_no);
+ vport = rcu_dereference_rtnl(dp->ports[port_no]);
if (!vport)
return ERR_PTR(-ENOENT);
return vport;
if (port_no >= DP_MAX_PORTS)
goto exit_unlock;
- vport = get_vport_protected(dp, port_no);
+ vport = rtnl_dereference(dp->ports[port_no]);
err = -EBUSY;
if (vport)
goto exit_unlock;
err = -EFBIG;
goto exit_unlock;
}
- vport = get_vport_protected(dp, port_no);
+ vport = rtnl_dereference(dp->ports[port_no]);
if (!vport)
break;
}
for (port_no = cb->args[0]; port_no < DP_MAX_PORTS; port_no++) {
struct vport *vport;
- vport = get_vport_protected(dp, port_no);
+ vport = rcu_dereference(dp->ports[port_no]);
if (!vport)
continue;