Re: [PATCH v3 01/11] leds: led-class: Add missing put_device() to led_put()

Andy Shevchenko
2022-12-16T13:35:39Z

On Fri, Dec 16, 2022 at 12:30:03PM +0100, Hans de Goede wrote:
> led_put() is used to "undo" a successful of_led_get() call,
> of_led_get() uses class_find_device_by_of_node() which returns
> a reference to the device which must be free-ed with put_device()
> when the caller is done with it.
>
> Add a put_device() call to led_put() to free the reference returned
> by class_find_device_by_of_node().
>
> And also add a put_device() in the error-exit case of try_module_get()
> failing.

...

> led_cdev = dev_get_drvdata(led_dev);
>
> - if (!try_module_get(led_cdev->dev->parent->driver->owner))
> + if (!try_module_get(led_cdev->dev->parent->driver->owner)) {
> + put_device(led_cdev->dev);
> return ERR_PTR(-ENODEV);
> + }
>
> return led_cdev;

...

> void led_put(struct led_classdev *led_cdev)
> {
> module_put(led_cdev->dev->parent->driver->owner);
> + put_device(led_cdev->dev);

Hmm... It was in the original submission.

https://lore.kernel.org/linux-leds/1443605522-1118-2-git-send-email-tomi.valkeinen@ti.com/

Nevertheless, shouldn't you put device before putting module? (It may need to
save the owner of the driver, I think.)

> }

--
With Best Regards,
Andy Shevchenko