if (bus) {
pr_debug("bus %s: add driver %s\n",bus->name,drv->name);
- kobject_set_name(&drv->kobj,drv->name);
+ error = kobject_set_name(&drv->kobj,drv->name);
+ if (error) {
+ put_bus(bus);
+ return error;
+ }
drv->kobj.kset = &bus->drivers;
if ((error = kobject_register(&drv->kobj))) {
put_bus(bus);
*/
int bus_register(struct bus_type * bus)
{
- kobject_set_name(&bus->subsys.kset.kobj,bus->name);
+ int retval;
+
+ retval = kobject_set_name(&bus->subsys.kset.kobj,bus->name);
+ if (retval)
+ goto out;
+
subsys_set_kset(bus,bus_subsys);
- subsystem_register(&bus->subsys);
+ retval = subsystem_register(&bus->subsys);
+ if (retval)
+ goto out;
kobject_set_name(&bus->devices.kobj, "devices");
bus->devices.subsys = &bus->subsys;
- kset_register(&bus->devices);
+ retval = kset_register(&bus->devices);
+ if (retval)
+ goto bus_devices_fail;
kobject_set_name(&bus->drivers.kobj, "drivers");
bus->drivers.subsys = &bus->subsys;
bus->drivers.ktype = &ktype_driver;
- kset_register(&bus->drivers);
+ retval = kset_register(&bus->drivers);
+ if (retval)
+ goto bus_drivers_fail;
pr_debug("bus type '%s' registered\n",bus->name);
return 0;
+
+bus_drivers_fail:
+ kset_unregister(&bus->devices);
+bus_devices_fail:
+ subsystem_unregister(&bus->subsys);
+out:
+ return retval;
}