Dne 21.3.2017 v 10:58 Maurizio Lombardi napsal(a):
> I will ask our customer to test your patch,
> there is only a small problem: you can't set cdev->dev = NULL
> and then call enclosure_add_links(cdev) because you will end up dereferencing
> a NULL pointer.
> I suggest a slightly different patch:
>
> @@ -375,6 +379,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 +389,18 @@ 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);
Our customer confirms that this patch solves his issues with enclosures'
symlinks.