mirror of https://gitee.com/openkylin/linux.git
driver core fixes: bus_add_device() cleanup on error
Correct cleanup in the error path of bus_add_device(). Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
1bb6881aca
commit
513e7337ad
|
@ -372,19 +372,30 @@ int bus_add_device(struct device * dev)
|
||||||
pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id);
|
pr_debug("bus %s: add device %s\n", bus->name, dev->bus_id);
|
||||||
error = device_add_attrs(bus, dev);
|
error = device_add_attrs(bus, dev);
|
||||||
if (error)
|
if (error)
|
||||||
goto out;
|
goto out_put;
|
||||||
error = sysfs_create_link(&bus->devices.kobj,
|
error = sysfs_create_link(&bus->devices.kobj,
|
||||||
&dev->kobj, dev->bus_id);
|
&dev->kobj, dev->bus_id);
|
||||||
if (error)
|
if (error)
|
||||||
goto out;
|
goto out_id;
|
||||||
error = sysfs_create_link(&dev->kobj,
|
error = sysfs_create_link(&dev->kobj,
|
||||||
&dev->bus->subsys.kset.kobj, "subsystem");
|
&dev->bus->subsys.kset.kobj, "subsystem");
|
||||||
if (error)
|
if (error)
|
||||||
goto out;
|
goto out_subsys;
|
||||||
error = sysfs_create_link(&dev->kobj,
|
error = sysfs_create_link(&dev->kobj,
|
||||||
&dev->bus->subsys.kset.kobj, "bus");
|
&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;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue