gpiolib: split error path in gpiod_request_commit()
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Wed, 21 Oct 2020 11:25:37 +0000 (14:25 +0300)
committerBartosz Golaszewski <bgolaszewski@baylibre.com>
Mon, 26 Oct 2020 14:43:41 +0000 (15:43 +0100)
For better maintenance and micro optimization split error path
in the gpiod_request_commit().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
drivers/gpio/gpiolib.c

index 20e3eb7..a72d629 100644 (file)
@@ -1968,11 +1968,9 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
 
        if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
                desc_set_label(desc, label ? : "?");
-               ret = 0;
        } else {
-               kfree_const(label);
                ret = -EBUSY;
-               goto done;
+               goto out_free_unlock;
        }
 
        if (gc->request) {
@@ -1987,9 +1985,8 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
 
                if (ret) {
                        desc_set_label(desc, NULL);
-                       kfree_const(label);
                        clear_bit(FLAG_REQUESTED, &desc->flags);
-                       goto done;
+                       goto out_free_unlock;
                }
        }
        if (gc->get_direction) {
@@ -1998,8 +1995,12 @@ static int gpiod_request_commit(struct gpio_desc *desc, const char *label)
                gpiod_get_direction(desc);
                spin_lock_irqsave(&gpio_lock, flags);
        }
-done:
        spin_unlock_irqrestore(&gpio_lock, flags);
+       return 0;
+
+out_free_unlock:
+       spin_unlock_irqrestore(&gpio_lock, flags);
+       kfree_const(label);
        return ret;
 }