diff options
Diffstat (limited to 'drivers/net/macvlan.c')
| -rw-r--r-- | drivers/net/macvlan.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c index 8433de4509c7..1831fb7cd017 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -506,6 +506,9 @@ static int macvlan_change_mtu(struct net_device *dev, int new_mtu)  static struct lock_class_key macvlan_netdev_xmit_lock_key;  static struct lock_class_key macvlan_netdev_addr_lock_key; +#define ALWAYS_ON_FEATURES \ +	(NETIF_F_SG | NETIF_F_GEN_CSUM | NETIF_F_GSO_SOFTWARE | NETIF_F_LLTX) +  #define MACVLAN_FEATURES \  	(NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \  	 NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_GSO_ROBUST | \ @@ -539,7 +542,7 @@ static int macvlan_init(struct net_device *dev)  	dev->state		= (dev->state & ~MACVLAN_STATE_MASK) |  				  (lowerdev->state & MACVLAN_STATE_MASK);  	dev->features 		= lowerdev->features & MACVLAN_FEATURES; -	dev->features		|= NETIF_F_LLTX; +	dev->features		|= ALWAYS_ON_FEATURES;  	dev->gso_max_size	= lowerdev->gso_max_size;  	dev->iflink		= lowerdev->ifindex;  	dev->hard_header_len	= lowerdev->hard_header_len; @@ -699,7 +702,7 @@ static netdev_features_t macvlan_fix_features(struct net_device *dev,  	features = netdev_increment_features(vlan->lowerdev->features,  					     features,  					     mask); -	features |= NETIF_F_LLTX; +	features |= ALWAYS_ON_FEATURES;  	return features;  } @@ -879,14 +882,15 @@ int macvlan_common_newlink(struct net *src_net, struct net_device *dev,  	dev->priv_flags |= IFF_MACVLAN;  	err = netdev_upper_dev_link(lowerdev, dev);  	if (err) -		goto destroy_port; - +		goto unregister_netdev;  	list_add_tail_rcu(&vlan->list, &port->vlans);  	netif_stacked_transfer_operstate(lowerdev, dev);  	return 0; +unregister_netdev: +	unregister_netdevice(dev);  destroy_port:  	port->count -= 1;  	if (!port->count)  | 
