diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 38 | 
1 files changed, 17 insertions, 21 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index c2ac599fa0f6..b624fe4d9bd7 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -1284,11 +1284,13 @@ static int dev_close_many(struct list_head *head)   */  int dev_close(struct net_device *dev)  { -	LIST_HEAD(single); +	if (dev->flags & IFF_UP) { +		LIST_HEAD(single); -	list_add(&dev->unreg_list, &single); -	dev_close_many(&single); -	list_del(&single); +		list_add(&dev->unreg_list, &single); +		dev_close_many(&single); +		list_del(&single); +	}  	return 0;  }  EXPORT_SYMBOL(dev_close); @@ -4773,7 +4775,7 @@ static int dev_ifsioc_locked(struct net *net, struct ifreq *ifr, unsigned int cm  		 * is never reached  		 */  		WARN_ON(1); -		err = -EINVAL; +		err = -ENOTTY;  		break;  	} @@ -5041,7 +5043,7 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg)  		/* Set the per device memory buffer space.  		 * Not applicable in our case */  	case SIOCSIFLINK: -		return -EINVAL; +		return -ENOTTY;  	/*  	 *	Unknown or private ioctl. @@ -5062,7 +5064,7 @@ int dev_ioctl(struct net *net, unsigned int cmd, void __user *arg)  		/* Take care of Wireless Extensions */  		if (cmd >= SIOCIWFIRST && cmd <= SIOCIWLAST)  			return wext_handle_ioctl(net, &ifr, cmd, arg); -		return -EINVAL; +		return -ENOTTY;  	}  } @@ -5184,27 +5186,27 @@ u32 netdev_fix_features(struct net_device *dev, u32 features)  	/* Fix illegal checksum combinations */  	if ((features & NETIF_F_HW_CSUM) &&  	    (features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) { -		netdev_info(dev, "mixed HW and IP checksum settings.\n"); +		netdev_warn(dev, "mixed HW and IP checksum settings.\n");  		features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM);  	}  	if ((features & NETIF_F_NO_CSUM) &&  	    (features & (NETIF_F_HW_CSUM|NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) { -		netdev_info(dev, "mixed no checksumming and other settings.\n"); +		netdev_warn(dev, "mixed no checksumming and other settings.\n");  		features &= ~(NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM|NETIF_F_HW_CSUM);  	}  	/* Fix illegal SG+CSUM combinations. */  	if ((features & NETIF_F_SG) &&  	    !(features & NETIF_F_ALL_CSUM)) { -		netdev_info(dev, -			    "Dropping NETIF_F_SG since no checksum feature.\n"); +		netdev_dbg(dev, +			"Dropping NETIF_F_SG since no checksum feature.\n");  		features &= ~NETIF_F_SG;  	}  	/* TSO requires that SG is present as well. */  	if ((features & NETIF_F_ALL_TSO) && !(features & NETIF_F_SG)) { -		netdev_info(dev, "Dropping TSO features since no SG feature.\n"); +		netdev_dbg(dev, "Dropping TSO features since no SG feature.\n");  		features &= ~NETIF_F_ALL_TSO;  	} @@ -5214,7 +5216,7 @@ u32 netdev_fix_features(struct net_device *dev, u32 features)  	/* Software GSO depends on SG. */  	if ((features & NETIF_F_GSO) && !(features & NETIF_F_SG)) { -		netdev_info(dev, "Dropping NETIF_F_GSO since no SG feature.\n"); +		netdev_dbg(dev, "Dropping NETIF_F_GSO since no SG feature.\n");  		features &= ~NETIF_F_GSO;  	} @@ -5224,13 +5226,13 @@ u32 netdev_fix_features(struct net_device *dev, u32 features)  		if (!((features & NETIF_F_GEN_CSUM) ||  		    (features & (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))  			    == (NETIF_F_IP_CSUM|NETIF_F_IPV6_CSUM))) { -			netdev_info(dev, +			netdev_dbg(dev,  				"Dropping NETIF_F_UFO since no checksum offload features.\n");  			features &= ~NETIF_F_UFO;  		}  		if (!(features & NETIF_F_SG)) { -			netdev_info(dev, +			netdev_dbg(dev,  				"Dropping NETIF_F_UFO since no NETIF_F_SG feature.\n");  			features &= ~NETIF_F_UFO;  		} @@ -5412,12 +5414,6 @@ int register_netdevice(struct net_device *dev)  	dev->features |= NETIF_F_SOFT_FEATURES;  	dev->wanted_features = dev->features & dev->hw_features; -	/* Avoid warning from netdev_fix_features() for GSO without SG */ -	if (!(dev->wanted_features & NETIF_F_SG)) { -		dev->wanted_features &= ~NETIF_F_GSO; -		dev->features &= ~NETIF_F_GSO; -	} -  	/* Enable GRO and NETIF_F_HIGHDMA for vlans by default,  	 * vlan_dev_init() will do the dev->features check, so these features  	 * are enabled only if supported by underlying device.  | 
