xfs: return inode fork offset in bulkstat for fsr
[safe/jmp/linux-2.6] / net / core / net-sysfs.c
index 9b07535..099c753 100644 (file)
@@ -139,7 +139,9 @@ static ssize_t show_speed(struct device *dev,
        if (!rtnl_trylock())
                return restart_syscall();
 
-       if (netif_running(netdev) && netdev->ethtool_ops->get_settings) {
+       if (netif_running(netdev) &&
+           netdev->ethtool_ops &&
+           netdev->ethtool_ops->get_settings) {
                struct ethtool_cmd cmd = { ETHTOOL_GSET };
 
                if (!netdev->ethtool_ops->get_settings(netdev, &cmd))
@@ -158,7 +160,9 @@ static ssize_t show_duplex(struct device *dev,
        if (!rtnl_trylock())
                return restart_syscall();
 
-       if (netif_running(netdev) && netdev->ethtool_ops->get_settings) {
+       if (netif_running(netdev) &&
+           netdev->ethtool_ops &&
+           netdev->ethtool_ops->get_settings) {
                struct ethtool_cmd cmd = { ETHTOOL_GSET };
 
                if (!netdev->ethtool_ops->get_settings(netdev, &cmd))
@@ -406,13 +410,14 @@ static ssize_t wireless_show(struct device *d, char *buf,
        const struct iw_statistics *iw;
        ssize_t ret = -EINVAL;
 
-       read_lock(&dev_base_lock);
+       if (!rtnl_trylock())
+               return restart_syscall();
        if (dev_isalive(dev)) {
                iw = get_wireless_stats(dev);
                if (iw)
                        ret = (*format)(iw, buf);
        }
-       read_unlock(&dev_base_lock);
+       rtnl_unlock();
 
        return ret;
 }
@@ -521,7 +526,7 @@ void netdev_unregister_kobject(struct net_device * net)
 
        kobject_get(&dev->kobj);
 
-       if (dev_net(net) != &init_net)
+       if (!net_eq(dev_net(net), &init_net))
                return;
 
        device_del(dev);
@@ -540,8 +545,11 @@ int netdev_register_kobject(struct net_device *net)
        dev_set_name(dev, "%s", net->name);
 
 #ifdef CONFIG_SYSFS
-       *groups++ = &netstat_group;
+       /* Allow for a device specific group */
+       if (*groups)
+               groups++;
 
+       *groups++ = &netstat_group;
 #ifdef CONFIG_WIRELESS_EXT_SYSFS
        if (net->ieee80211_ptr)
                *groups++ = &wireless_group;
@@ -552,7 +560,7 @@ int netdev_register_kobject(struct net_device *net)
 #endif
 #endif /* CONFIG_SYSFS */
 
-       if (dev_net(net) != &init_net)
+       if (!net_eq(dev_net(net), &init_net))
                return 0;
 
        return device_add(dev);