From: Bill Nottingham <[EMAIL PROTECTED]>

The class symlinks in sysfs don't properly handle changing device names.

To demonstrate, rename your network device from eth0 to eth1. Your
pci (or usb, or whatever) device will still have a 'net:eth0' link,
except now it points to /sys/class/net/eth1.

The attached patch makes sure the class symlink name changes when
the class device name changes. It isn't 100% correct, it should be
using sysfs_rename_link. Unfortunately, sysfs_rename_link doesn't exist.

Signed-off-by: Bill Nottingham <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>

---
 drivers/base/class.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

--- scsi-2.6.orig/drivers/base/class.c  2005-09-20 05:59:41.000000000 -0700
+++ scsi-2.6/drivers/base/class.c       2005-09-21 17:29:22.000000000 -0700
@@ -669,6 +669,7 @@
 int class_device_rename(struct class_device *class_dev, char *new_name)
 {
        int error = 0;
+       char *old_class_name = NULL, *new_class_name = NULL;
 
        class_dev = class_device_get(class_dev);
        if (!class_dev)
@@ -677,12 +678,24 @@
        pr_debug("CLASS: renaming '%s' to '%s'\n", class_dev->class_id,
                 new_name);
 
+       if (class_dev->dev)
+               old_class_name = make_class_name(class_dev);
+
        strlcpy(class_dev->class_id, new_name, KOBJ_NAME_LEN);
 
        error = kobject_rename(&class_dev->kobj, new_name);
 
+       if (class_dev->dev) {
+               new_class_name = make_class_name(class_dev);
+               sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj,
+                                 new_class_name);
+               sysfs_remove_link(&class_dev->dev->kobj, old_class_name);
+       }
        class_device_put(class_dev);
 
+       kfree(old_class_name);
+       kfree(new_class_name);
+
        return error;
 }
 

--


-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to