diff --git a/drivers/base/bus.c b/drivers/base/bus.c index b23eeb2d4ead..6796d3e46053 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c @@ -638,7 +638,7 @@ int bus_add_driver(struct device_driver *drv) error = kobject_set_name(&drv->kobj, "%s", drv->name); if (error) goto out_put_bus; - drv->kobj.kset = &bus->drivers; + drv->kobj.kset = bus->drivers_kset; drv->kobj.ktype = &driver_ktype; error = kobject_register(&drv->kobj); if (error) @@ -869,11 +869,12 @@ int bus_register(struct bus_type * bus) goto bus_devices_fail; } - kobject_set_name(&bus->drivers.kobj, "drivers"); - bus->drivers.kobj.parent = &bus->subsys.kobj; - retval = kset_register(&bus->drivers); - if (retval) + bus->drivers_kset = kset_create_and_add("drivers", NULL, + &bus->subsys.kobj); + if (!bus->drivers_kset) { + retval = -ENOMEM; goto bus_drivers_fail; + } klist_init(&bus->klist_devices, klist_devices_get, klist_devices_put); klist_init(&bus->klist_drivers, NULL, NULL); @@ -893,7 +894,7 @@ int bus_register(struct bus_type * bus) bus_attrs_fail: remove_probe_files(bus); bus_probe_files_fail: - kset_unregister(&bus->drivers); + kset_unregister(bus->drivers_kset); bus_drivers_fail: kset_unregister(bus->devices_kset); bus_devices_fail: @@ -916,7 +917,7 @@ void bus_unregister(struct bus_type * bus) pr_debug("bus %s: unregistering\n", bus->name); bus_remove_attrs(bus); remove_probe_files(bus); - kset_unregister(&bus->drivers); + kset_unregister(bus->drivers_kset); kset_unregister(bus->devices_kset); bus_remove_file(bus, &bus_attr_uevent); subsystem_unregister(&bus->subsys); diff --git a/drivers/base/driver.c b/drivers/base/driver.c index eb11475293ed..1c9770dfb801 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c @@ -185,7 +185,7 @@ void driver_unregister(struct device_driver * drv) */ struct device_driver *driver_find(const char *name, struct bus_type *bus) { - struct kobject *k = kset_find_obj(&bus->drivers, name); + struct kobject *k = kset_find_obj(bus->drivers_kset, name); if (k) return to_drv(k); return NULL; diff --git a/include/linux/device.h b/include/linux/device.h index 82c277771376..110ace0dec3f 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -54,7 +54,7 @@ struct bus_type { struct module * owner; struct kset subsys; - struct kset drivers; + struct kset *drivers_kset; struct kset *devices_kset; struct klist klist_devices; struct klist klist_drivers;