Driver core: fix SYSF_DEPRECATED breakage for nested classdevs
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 7 Oct 2007 16:22:21 +0000 (12:22 -0400)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Sun, 7 Oct 2007 23:42:22 +0000 (16:42 -0700)
We should only reparent to a class former class devices that
form the base of class hierarchy. Nested devices should still
grow from their real parents.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Tested-by: Andrey Borzenkov <arvidjaar@mail.ru>
Tested-by: Anssi Hannula <anssi.hannula@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/base/core.c

index 67c92582d6ef5da185eecd5645d145a984e56310..ec86d6fc2360bbb3fa6286a1972a7f82f36c3699 100644 (file)
@@ -586,9 +586,13 @@ void device_initialize(struct device *dev)
 static struct kobject * get_device_parent(struct device *dev,
                                          struct device *parent)
 {
-       /* Set the parent to the class, not the parent device */
-       /* this keeps sysfs from having a symlink to make old udevs happy */
-       if (dev->class)
+       /*
+        * Set the parent to the class, not the parent device
+        * for topmost devices in class hierarchy.
+        * This keeps sysfs from having a symlink to make old
+        * udevs happy
+        */
+       if (dev->class && (!parent || parent->class != dev->class))
                return &dev->class->subsys.kobj;
        else if (parent)
                return &parent->kobj;