forked from Minki/linux
openvswitch: add net device refcount tracker to struct vport
Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e4b8954074
commit
e7c8ab8419
@ -82,7 +82,7 @@ struct vport *ovs_netdev_link(struct vport *vport, const char *name)
|
||||
err = -ENODEV;
|
||||
goto error_free_vport;
|
||||
}
|
||||
|
||||
netdev_tracker_alloc(vport->dev, &vport->dev_tracker, GFP_KERNEL);
|
||||
if (vport->dev->flags & IFF_LOOPBACK ||
|
||||
(vport->dev->type != ARPHRD_ETHER &&
|
||||
vport->dev->type != ARPHRD_NONE) ||
|
||||
@ -115,7 +115,7 @@ error_master_upper_dev_unlink:
|
||||
error_unlock:
|
||||
rtnl_unlock();
|
||||
error_put:
|
||||
dev_put(vport->dev);
|
||||
dev_put_track(vport->dev, &vport->dev_tracker);
|
||||
error_free_vport:
|
||||
ovs_vport_free(vport);
|
||||
return ERR_PTR(err);
|
||||
@ -137,7 +137,7 @@ static void vport_netdev_free(struct rcu_head *rcu)
|
||||
{
|
||||
struct vport *vport = container_of(rcu, struct vport, rcu);
|
||||
|
||||
dev_put(vport->dev);
|
||||
dev_put_track(vport->dev, &vport->dev_tracker);
|
||||
ovs_vport_free(vport);
|
||||
}
|
||||
|
||||
@ -173,7 +173,7 @@ void ovs_netdev_tunnel_destroy(struct vport *vport)
|
||||
*/
|
||||
if (vport->dev->reg_state == NETREG_REGISTERED)
|
||||
rtnl_delete_link(vport->dev);
|
||||
dev_put(vport->dev);
|
||||
dev_put_track(vport->dev, &vport->dev_tracker);
|
||||
vport->dev = NULL;
|
||||
rtnl_unlock();
|
||||
|
||||
|
@ -58,6 +58,7 @@ struct vport_portids {
|
||||
/**
|
||||
* struct vport - one port within a datapath
|
||||
* @dev: Pointer to net_device.
|
||||
* @dev_tracker: refcount tracker for @dev reference
|
||||
* @dp: Datapath to which this port belongs.
|
||||
* @upcall_portids: RCU protected 'struct vport_portids'.
|
||||
* @port_no: Index into @dp's @ports array.
|
||||
@ -69,6 +70,7 @@ struct vport_portids {
|
||||
*/
|
||||
struct vport {
|
||||
struct net_device *dev;
|
||||
netdevice_tracker dev_tracker;
|
||||
struct datapath *dp;
|
||||
struct vport_portids __rcu *upcall_portids;
|
||||
u16 port_no;
|
||||
|
Loading…
Reference in New Issue
Block a user