diff options
Diffstat (limited to 'net/core')
| -rw-r--r-- | net/core/dev.c | 2 | ||||
| -rw-r--r-- | net/core/net-sysfs.c | 49 | 
2 files changed, 13 insertions, 38 deletions
| diff --git a/net/core/dev.c b/net/core/dev.c index 3bad1afc89f..9ab3cfa5846 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3043,11 +3043,11 @@ void netdev_run_todo(void)  		switch(dev->reg_state) {  		case NETREG_REGISTERING: -			dev->reg_state = NETREG_REGISTERED;  			err = netdev_register_sysfs(dev);  			if (err)  				printk(KERN_ERR "%s: failed sysfs registration (%d)\n",  				       dev->name, err); +			dev->reg_state = NETREG_REGISTERED;  			break;  		case NETREG_UNREGISTERING: diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index c12990c9c60..47a6fceb677 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -29,7 +29,7 @@ static const char fmt_ulong[] = "%lu\n";  static inline int dev_isalive(const struct net_device *dev)   { -	return dev->reg_state == NETREG_REGISTERED; +	return dev->reg_state <= NETREG_REGISTERED;  }  /* use same locking rules as GIF* ioctl's */ @@ -445,58 +445,33 @@ static struct class net_class = {  void netdev_unregister_sysfs(struct net_device * net)  { -	struct class_device * class_dev = &(net->class_dev); - -	if (net->get_stats) -		sysfs_remove_group(&class_dev->kobj, &netstat_group); - -#ifdef WIRELESS_EXT -	if (net->get_wireless_stats || (net->wireless_handlers && -			net->wireless_handlers->get_wireless_stats)) -		sysfs_remove_group(&class_dev->kobj, &wireless_group); -#endif -	class_device_del(class_dev); - +	class_device_del(&(net->class_dev));  }  /* Create sysfs entries for network device. */  int netdev_register_sysfs(struct net_device *net)  {  	struct class_device *class_dev = &(net->class_dev); -	int ret; +	struct attribute_group **groups = net->sysfs_groups; +	class_device_initialize(class_dev);  	class_dev->class = &net_class;  	class_dev->class_data = net; +	class_dev->groups = groups; +	BUILD_BUG_ON(BUS_ID_SIZE < IFNAMSIZ);  	strlcpy(class_dev->class_id, net->name, BUS_ID_SIZE); -	if ((ret = class_device_register(class_dev))) -		goto out; -	if (net->get_stats && -	    (ret = sysfs_create_group(&class_dev->kobj, &netstat_group))) -		goto out_unreg;  +	if (net->get_stats) +		*groups++ = &netstat_group;  #ifdef WIRELESS_EXT -	if (net->get_wireless_stats || (net->wireless_handlers && -			net->wireless_handlers->get_wireless_stats)) { -		ret = sysfs_create_group(&class_dev->kobj, &wireless_group); -		if (ret) -			goto out_cleanup; -	} -	return 0; -out_cleanup: -	if (net->get_stats) -		sysfs_remove_group(&class_dev->kobj, &netstat_group); -#else -	return 0; +	if (net->get_wireless_stats +	    || (net->wireless_handlers && net->wireless_handlers->get_wireless_stats)) +		*groups++ = &wireless_group;  #endif -out_unreg: -	printk(KERN_WARNING "%s: sysfs attribute registration failed %d\n", -	       net->name, ret); -	class_device_unregister(class_dev); -out: -	return ret; +	return class_device_add(class_dev);  }  int netdev_sysfs_init(void) | 
