Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 26550
b: refs/heads/master
c: fe9925b
h: refs/heads/master
v: v3
  • Loading branch information
Stephen Hemminger authored and David S. Miller committed May 7, 2006
1 parent 3e3eaf3 commit 9d566c3
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 39 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1498221d51a43d5fa1a580618591497d90f957d9
refs/heads/master: fe9925b551a95fae6ec61470c79f8b701a2fe928
2 changes: 2 additions & 0 deletions trunk/include/linux/netdevice.h
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,8 @@ struct net_device

/* class/net/name entry */
struct class_device class_dev;
/* space for optional statistics and wireless sysfs groups */
struct attribute_group *sysfs_groups[3];
};

#define NETDEV_ALIGN 32
Expand Down
2 changes: 1 addition & 1 deletion trunk/net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
49 changes: 12 additions & 37 deletions trunk/net/core/net-sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 9d566c3

Please sign in to comment.