Hi, On 12/16/22 14:55, Andy Shevchenko wrote: > On Fri, Dec 16, 2022 at 03:35:29PM +0200, Andy Shevchenko wrote: >> On Fri, Dec 16, 2022 at 12:30:03PM +0100, Hans de Goede wrote: > > ... > >>> 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@xxxxxx/ > > ... > >> Nevertheless, shouldn't you put device before putting module? (It may need to >> save the owner of the driver, I think.) > > I think this is wrong, the symmetry is kept correct in your patch. Right, the line above dereferences led_cdev->dev, so the put() must be done after that line. Regards, Hans