post-sysfs netdev cleanup
Subsystems (2)
PATCH 1/1 post-sysfs netdev cleanup
The attached patch removes the struct device from struct net_device and sets net_device.class_dev.dev directly. The class_dev memset is removed because all of struct net_device should already be memset to 0 or there will be other problems.
-Jeff
include/linux/netdevice.h +1 -4
@@ -441,9 +441,6 @@struct divert_blk *divert;#endif /* CONFIG_NET_DIVERT */ -/* generic device structure used in constructing class */ -struct device *dev; -/* class/net/name entry */ struct class_device class_dev;
@@ -455,7 +452,7 @@/* Set the sysfs physical device reference for the network logical device * if set prior to registration will cause a symlink during initialization. */ -#define SET_NETDEV_DEV (net, pdev) ((net)->dev = (pdev)) +#define SET_NETDEV_DEV (net, pdev) ((net)->class_dev.dev = (pdev))struct packet_type
net/core/net-sysfs.c +0 -2
@@ -291,9 +291,7 @@struct class_device_attribute *attr;int ret; -memset (class_dev,0 ,sizeof (struct class_device )); class_dev->class = &net_class; - class_dev->dev = net->dev; class_dev->class_data = net;snprintf (class_dev->class_id,BUS_ID_SIZE , net->name);
From: Jeff Muizelaar <[email protected]>
Date: Thu, 22 May 2003 20:41:17 -0400
The attached patch removes the struct device from struct net_device and sets net_device.class_dev.dev directly.
The class_dev memset is removed because all of struct net_device should already be memset to 0 or there will be other problems.
Looks fine to me, Stephen?
David S. Miller
Applied From: Jeff Muizelaar <[email protected]>
Date: Thu, 22 May 2003 20:41:17 -0400
The attached patch removes the struct device from struct net_device and sets net_device.class_dev.dev directly.
Applied, thanks.
From: Stephen Hemminger <[email protected]>
Date: Fri, 23 May 2003 16:47:35 -0700
Seems like a good idea too.
Ok, great.
Stephen, I think we need to find a way to put the device registration call outside of the RTNL semaphore. I removed in the unregister case, but to be complete we have to push it out in the register path too.
The reason for all of these issues is that link_watch grabs the RTNL semaphore, and this runs via keventd. Thus, trying to invoke any usermode helper (/sbin/hotplug etc.) while holding the RTNL semaphore can deadlock.
Quoted 12 lines · On Sun, 25 May 2003 19:24:17 -0700 (PDT) "David S. Miller" <[email protected]>…
From: Stephen Hemminger <[email protected]>
Date: Fri, 23 May 2003 16:47:35 -0700Seems like a good idea too.
Ok, great.
Stephen, I think we need to find a way to put the device registration call outside of the RTNL semaphore. I removed in the unregister case, but to be complete we have to push it out in the register path too.
Quoted 4 lines
The reason for all of these issues is that
link_watchgrabs the RTNL semaphore, and this runs via keventd. Thus, trying to invoke any usermode helper (/sbin/hotplugetc.) while holding the RTNL semaphore can deadlock.
There needs to be some locking in the registration path doesn't there to prevent two calls to register the same name and other possible conflicts. So do you want to use dev_base lock or some other locking?
From: Stephen Hemminger <[email protected]>
Date: Tue, 27 May 2003 09:51:29 -0700
There needs to be some locking in the registration path doesn't there to prevent two calls to register the same name and other possible conflicts. So do you want to use dev_base lock or some other locking?
Good point. We can't be as "fast and loose" with this as we can with the hotplug invocation...
I can't come up with a usable solution at this moment. :(