patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / drivers / base / bus.c
index ebb0ec3..b40af6a 100644 (file)
@@ -451,7 +451,11 @@ int bus_add_driver(struct device_driver * drv)
 
        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);
@@ -555,21 +559,39 @@ struct bus_type * find_bus(char * name)
  */
 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;
 }