|
@@ -372,19 +372,30 @@ int bus_add_device(struct device * dev)
|
|
|
pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id);
|
|
|
error = device_add_attrs(bus, dev);
|
|
|
if (error)
|
|
|
- goto out;
|
|
|
+ goto out_put;
|
|
|
error = sysfs_create_link(&bus->devices.kobj,
|
|
|
&dev->kobj, dev->bus_id);
|
|
|
if (error)
|
|
|
- goto out;
|
|
|
+ goto out_id;
|
|
|
error = sysfs_create_link(&dev->kobj,
|
|
|
&dev->bus->subsys.kset.kobj, "subsystem");
|
|
|
if (error)
|
|
|
- goto out;
|
|
|
+ goto out_subsys;
|
|
|
error = sysfs_create_link(&dev->kobj,
|
|
|
&dev->bus->subsys.kset.kobj, "bus");
|
|
|
+ if (error)
|
|
|
+ goto out_deprecated;
|
|
|
}
|
|
|
-out:
|
|
|
+ return 0;
|
|
|
+
|
|
|
+out_deprecated:
|
|
|
+ sysfs_remove_link(&dev->kobj, "subsystem");
|
|
|
+out_subsys:
|
|
|
+ sysfs_remove_link(&bus->devices.kobj, dev->bus_id);
|
|
|
+out_id:
|
|
|
+ device_remove_attrs(bus, dev);
|
|
|
+out_put:
|
|
|
+ put_bus(dev->bus);
|
|
|
return error;
|
|
|
}
|
|
|
|