Re: [PATCH v1 1/1] gpiolib: Make gpiod_put() error pointer aware

From: Bartosz Golaszewski
Date: Thu Apr 03 2025 - 02:58:33 EST


On Wed, Apr 2, 2025 at 5:20 PM Andy Shevchenko
<andriy.shevchenko@xxxxxxxxxxxxxxx> wrote:
>
> When non-optional GPIO is requested and failed, the variable that holds
> the (invalid) descriptor can contain an error pointer. However, gpiod_put()
> ignores that fact and tries to cleanup never requested descriptor.
> Make sure gpiod_put() ignores that as well.
>
> While at it, do the same for the gpiod_put_array().
>
> Note, it arguable needs to be present in the stubs as those are usually
> called when CONFIG_GPIOLIB=n and GPIOs are requested using gpiod_get_optional()
> or similar APIs.
>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
> ---

I'm not a fan of this. Silently ignoring NULL makes sense in the
context of _optional() calls where we want to do nothing on GPIOs that
aren't there. But this encourages people to get sloppy and just ignore
error pointers returned from gpiod_get()? Also: all other calls error
out on IS_ERR(desc) so why would we make it an exception? If anything,
the broadcom SPI driver this is about should store the return value of
gpiod_get() in a local variable, check it and then assign NULL to the
actual descriptor stored in the driver data.

We return errors for a reason, I don't like the idea of just ignoring
them in gpiod_put().

Bartosz