Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2434021pxj; Mon, 10 May 2021 02:55:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy0qupXOCPqnQtiGSvjVgdzsntr/A2uHgP24X5GFj/CqhWYbV+/lXD+Gy+8ioE5KoXTVXA+ X-Received: by 2002:a05:6602:2289:: with SMTP id d9mr13762901iod.198.1620640503596; Mon, 10 May 2021 02:55:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620640503; cv=none; d=google.com; s=arc-20160816; b=JQa9YzLddi/+JRAN5Wnphedlxh8v1sWwK4WugX/QcnIoEHhIGu8z7pXtHupAPG5sw9 Uj6dgK2Emo4O/GmttwUM1AMJK5sgscm7SZSfUrZrmRv5S2BQqCh8X1O1kF2RqXIgAKe8 f5gxEYTdFQ8UTbsSZ05n4Y+4F3qbKVlRbt6VKkzN6arP9Z+OfrGIRh38KzWgrd1S9b+k j/TEgGtvrYzWn8eWMznCVZhGTCzyEfzXTrmMAt0MlKW7ZjUG8V0l+SQzrnMZlqoRQW7J Kk/ZKVPB5SK+m6VqY8WyQlExF/s0frP5R8HDTYNnnel9x6ahBa353VEgwLxAAOYYXJ/u oZTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=qPnC+dL3q5FGiykZB430yyhX43htvF26uQHAQXDYBHA=; b=KC6PEqc2iEs0cbx7bVUIhju9c3Vpbl98v1rnIE0nFNLe/z+iaCL2xYljtHDHz28aa1 6I7rSkNpI4QiH+m8qyUhBYsgrOeoLgP8LJG4G5Blgu0GWwDARt6GCoVBdv+JAzKNEeQB Xg9c7WmWebhyok+v3HvaY4W4ZOMV4xUoqZc+wg8kf4Qg5C75YbOXOJenndBDZHiJb1cP zl6gMjWODTUA67HQf8oGe0X4n3XObAfF76bO639/qCnUMwWGzLyXeOHF6zqc1v5PpRFI uWWMp66l56lb4YL4lWdzEbC2fjHEzZtj5UuHahy+Sb6Gv7+1yIiBiFSXuGMKj22t09z1 pdJA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j1si15087605ilo.38.2021.05.10.02.54.51; Mon, 10 May 2021 02:55:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231463AbhEJJyQ (ORCPT + 99 others); Mon, 10 May 2021 05:54:16 -0400 Received: from fgw20-7.mail.saunalahti.fi ([62.142.5.81]:64415 "EHLO fgw20-7.mail.saunalahti.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231146AbhEJJwg (ORCPT ); Mon, 10 May 2021 05:52:36 -0400 Received: from localhost (88-115-248-186.elisa-laajakaista.fi [88.115.248.186]) by fgw20.mail.saunalahti.fi (Halon) with ESMTP id 458a1905-b175-11eb-ba24-005056bd6ce9; Mon, 10 May 2021 12:51:20 +0300 (EEST) From: Andy Shevchenko To: Pavel Machek , Andy Shevchenko , Amireddy Mallikarjuna reddy , Linus Walleij , =?UTF-8?q?Marek=20Beh=C3=BAn?= , Abanoub Sameh , Dan Murphy , Krzysztof Kozlowski , linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Andy Shevchenko Subject: [PATCH v1 26/28] leds: pwm: Make error handling more robust Date: Mon, 10 May 2021 12:50:43 +0300 Message-Id: <20210510095045.3299382-27-andy.shevchenko@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210510095045.3299382-1-andy.shevchenko@gmail.com> References: <20210510095045.3299382-1-andy.shevchenko@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org It's easy to miss necessary clean up, e.g. firmware node reference counting, during error path in ->probe(). Make it more robust by moving to a single point of return. Signed-off-by: Andy Shevchenko --- drivers/leds/leds-pwm.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c index f53f9309ca6c..d71e9fa5c8de 100644 --- a/drivers/leds/leds-pwm.c +++ b/drivers/leds/leds-pwm.c @@ -101,7 +101,7 @@ static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv) { struct fwnode_handle *fwnode; struct led_pwm led; - int ret = 0; + int ret; memset(&led, 0, sizeof(led)); @@ -111,8 +111,8 @@ static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv) led.name = to_of_node(fwnode)->name; if (!led.name) { - fwnode_handle_put(fwnode); - return -EINVAL; + ret = EINVAL; + goto err_child_out; } led.active_low = fwnode_property_read_bool(fwnode, @@ -121,12 +121,14 @@ static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv) &led.max_brightness); ret = led_pwm_add(dev, priv, &led, fwnode); - if (ret) { - fwnode_handle_put(fwnode); - break; - } + if (ret) + goto err_child_out; } + return 0; + +err_child_out: + fwnode_handle_put(fwnode); return ret; } -- 2.31.1