Commit e7c8ab84 authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

openvswitch: add net device refcount tracker to struct vport

parent e4b89540
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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 @@ struct vport *ovs_netdev_link(struct vport *vport, const char *name)
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();

+2 −0
Original line number Diff line number Diff line
@@ -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;