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

From: Andy Shevchenko
Date: Thu Apr 03 2025 - 04:05:02 EST


On Thu, Apr 03, 2025 at 08:58:09AM +0200, Bartosz Golaszewski wrote:
> 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.

> 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()?

>From where did you come to this conclusion, please? We have many subsystems
that ignore invalid resource on the release stage, starting from platform
device driver core.

> Also: all other calls error out on IS_ERR(desc) so why would we make it an
> exception?

Because it's _release_ stage that participates in the cleaning up of
the allocated resources in error paths. It's a common approach in
the kernel. I would rather ask what makes GPIOLIB so special about it?

> 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.

Broadcom SPI driver just reveals this disadvantage in GPIOLIB.

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

Yes, how does one links to the other, please?

--
With Best Regards,
Andy Shevchenko