diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 26 | 
1 files changed, 17 insertions, 9 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index d0cbc93fcf3..f64e439b4a0 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -203,7 +203,7 @@ static struct list_head offload_base __read_mostly;  DEFINE_RWLOCK(dev_base_lock);  EXPORT_SYMBOL(dev_base_lock); -DEFINE_SEQLOCK(devnet_rename_seq); +seqcount_t devnet_rename_seq;  static inline void dev_base_seq_inc(struct net *net)  { @@ -1093,10 +1093,10 @@ int dev_change_name(struct net_device *dev, const char *newname)  	if (dev->flags & IFF_UP)  		return -EBUSY; -	write_seqlock(&devnet_rename_seq); +	write_seqcount_begin(&devnet_rename_seq);  	if (strncmp(newname, dev->name, IFNAMSIZ) == 0) { -		write_sequnlock(&devnet_rename_seq); +		write_seqcount_end(&devnet_rename_seq);  		return 0;  	} @@ -1104,7 +1104,7 @@ int dev_change_name(struct net_device *dev, const char *newname)  	err = dev_get_valid_name(net, dev, newname);  	if (err < 0) { -		write_sequnlock(&devnet_rename_seq); +		write_seqcount_end(&devnet_rename_seq);  		return err;  	} @@ -1112,11 +1112,11 @@ rollback:  	ret = device_rename(&dev->dev, dev->name);  	if (ret) {  		memcpy(dev->name, oldname, IFNAMSIZ); -		write_sequnlock(&devnet_rename_seq); +		write_seqcount_end(&devnet_rename_seq);  		return ret;  	} -	write_sequnlock(&devnet_rename_seq); +	write_seqcount_end(&devnet_rename_seq);  	write_lock_bh(&dev_base_lock);  	hlist_del_rcu(&dev->name_hlist); @@ -1135,7 +1135,7 @@ rollback:  		/* err >= 0 after dev_alloc_name() or stores the first errno */  		if (err >= 0) {  			err = ret; -			write_seqlock(&devnet_rename_seq); +			write_seqcount_begin(&devnet_rename_seq);  			memcpy(dev->name, oldname, IFNAMSIZ);  			goto rollback;  		} else { @@ -4180,7 +4180,7 @@ static int dev_ifname(struct net *net, struct ifreq __user *arg)  		return -EFAULT;  retry: -	seq = read_seqbegin(&devnet_rename_seq); +	seq = read_seqcount_begin(&devnet_rename_seq);  	rcu_read_lock();  	dev = dev_get_by_index_rcu(net, ifr.ifr_ifindex);  	if (!dev) { @@ -4190,7 +4190,7 @@ retry:  	strcpy(ifr.ifr_name, dev->name);  	rcu_read_unlock(); -	if (read_seqretry(&devnet_rename_seq, seq)) +	if (read_seqcount_retry(&devnet_rename_seq, seq))  		goto retry;  	if (copy_to_user(arg, &ifr, sizeof(struct ifreq))) @@ -6121,6 +6121,14 @@ struct netdev_queue *dev_ingress_queue_create(struct net_device *dev)  static const struct ethtool_ops default_ethtool_ops; +void netdev_set_default_ethtool_ops(struct net_device *dev, +				    const struct ethtool_ops *ops) +{ +	if (dev->ethtool_ops == &default_ethtool_ops) +		dev->ethtool_ops = ops; +} +EXPORT_SYMBOL_GPL(netdev_set_default_ethtool_ops); +  /**   *	alloc_netdev_mqs - allocate network device   *	@sizeof_priv:	size of private data to allocate space for  |