|
@@ -375,6 +375,7 @@ int enclosure_add_device(struct enclosure_device *edev, int component,
|
|
|
struct device *dev)
|
|
|
{
|
|
|
struct enclosure_component *cdev;
|
|
|
+ int err;
|
|
|
|
|
|
if (!edev || component >= edev->components)
|
|
|
return -EINVAL;
|
|
@@ -384,12 +385,17 @@ int enclosure_add_device(struct enclosure_device *edev, int component,
|
|
|
if (cdev->dev == dev)
|
|
|
return -EEXIST;
|
|
|
|
|
|
- if (cdev->dev)
|
|
|
+ if (cdev->dev) {
|
|
|
enclosure_remove_links(cdev);
|
|
|
-
|
|
|
- put_device(cdev->dev);
|
|
|
+ put_device(cdev->dev);
|
|
|
+ }
|
|
|
cdev->dev = get_device(dev);
|
|
|
- return enclosure_add_links(cdev);
|
|
|
+ err = enclosure_add_links(cdev);
|
|
|
+ if (err) {
|
|
|
+ put_device(cdev->dev);
|
|
|
+ cdev->dev = NULL;
|
|
|
+ }
|
|
|
+ return err;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(enclosure_add_device);
|
|
|
|