On Fri, Oct 25, 2024 at 3:24 PM Kent Gibson <warthog618@xxxxxxxxx> wrote: > > On Fri, Oct 25, 2024 at 02:18:51PM +0200, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > > > Shrink the code and drop some goto labels by using lock guards around > > gpiod_data::mutex. > > > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > --- > > drivers/gpio/gpiolib-sysfs.c | 81 ++++++++++++++++---------------------------- > > 1 file changed, 29 insertions(+), 52 deletions(-) > > > > @@ -139,19 +132,17 @@ static ssize_t value_store(struct device *dev, > > long value; > > > > status = kstrtol(buf, 0, &value); > > + if (status) > > + return status; > > > > - mutex_lock(&data->mutex); > > + guard(mutex)(&data->mutex); > > > > - if (!test_bit(FLAG_IS_OUT, &desc->flags)) { > > - status = -EPERM; > > - } else if (status == 0) { > > - gpiod_set_value_cansleep(desc, value); > > - status = size; > > - } > > + if (!test_bit(FLAG_IS_OUT, &desc->flags)) > > + return -EPERM; > > > > - mutex_unlock(&data->mutex); > > + gpiod_set_value_cansleep(desc, value); > > > > - return status; > > + return size; > > } > > This is a behavioural change as you've moved the decode check before the > permission check. Not sure if that is significant or not, so in my > suggestion I retained the old order. > > Cheers, > Kent. Yeah, I don't know why it was done. Typically you want to sanitize the input before anything else and this is what's done almost everywhere else. I'd keep it like that. Bart