diff -ru linux/drivers/base/class.c linux/drivers/base/class.c --- linux/drivers/base/class.c 2005-09-16 15:17:11.000000000 -0400 +++ linux/drivers/base/class.c 2005-09-16 15:15:58.000000000 -0400 @@ -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,11 +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; }