diff options
Diffstat (limited to 'net/8021q/vlan_dev.c')
| -rw-r--r-- | net/8021q/vlan_dev.c | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index ab6dee28536d..26d031a43cc1 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -573,8 +573,8 @@ static int vlan_dev_init(struct net_device *dev)  			   NETIF_F_ALL_FCOE;  	dev->features |= dev->hw_features | NETIF_F_LLTX; -	dev->gso_max_size = real_dev->gso_max_size; -	dev->gso_max_segs = real_dev->gso_max_segs; +	netif_set_gso_max_size(dev, real_dev->gso_max_size); +	netif_set_gso_max_segs(dev, real_dev->gso_max_segs);  	if (dev->features & NETIF_F_VLAN_FEATURES)  		netdev_warn(real_dev, "VLAN features are set incorrectly.  Q-in-Q configurations may not work correctly.\n"); @@ -615,6 +615,9 @@ static int vlan_dev_init(struct net_device *dev)  	if (!vlan->vlan_pcpu_stats)  		return -ENOMEM; +	/* Get vlan's reference to real_dev */ +	dev_hold_track(real_dev, &vlan->dev_tracker, GFP_KERNEL); +  	return 0;  } @@ -845,7 +848,7 @@ static void vlan_dev_free(struct net_device *dev)  	vlan->vlan_pcpu_stats = NULL;  	/* Get rid of the vlan's reference to real_dev */ -	dev_put(vlan->real_dev); +	dev_put_track(vlan->real_dev, &vlan->dev_tracker);  }  void vlan_setup(struct net_device *dev) |