Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp2433409pxj; Mon, 10 May 2021 02:53:39 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxpkxUXETPiz64G1Kz9w4cbcku2T37N67fROKvGEomleJ3Imdn97ZStlz+//I0tDVzSithD X-Received: by 2002:a92:cb51:: with SMTP id f17mr21753658ilq.119.1620640419442; Mon, 10 May 2021 02:53:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620640419; cv=none; d=google.com; s=arc-20160816; b=1LZohGdNWVhcOp2o2DFUnagBpqnrsIsarC9WHD35UutYfnuFplt+oXPbXXEoS6tNbK l9rJ20JdZHBWG+RQ14f16xL5TM/zjesba/WAv5wNoOvzSbB+RMDZT1fNO39jymnTLZXl 9vFj84eHv3QdHqwsRMQMHtRt0fTBI7bHIm9Il+yzqOsDknco2UPcF281BjTgDuvvkSGx yOl8PelMiut6Eegw+JB6yWwjYI7wx9e2w8+KJovhed2xrd1hKiTSdt832QnaI6tcnwHM ZPXUoBhLwmhRDCXbFx5+ZxHm4OUQTQN5bDjc6B7ky7WQ9w3tVPtKHv0LJf/ZVjWvgjXx Gy3A== 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=xVGiRm7qtxKmuILKUPXLMiYClOuPdjyguziNDxn0xtk=; b=Zzw4R0ufUX8SmTtBSMYXFywAIPemG4bkZHbI1dAWIRPfGDoaCzxLBUsOQTwiLWpgMu EWRIrH74w16+stXbpwasv/XHC89HWzMx8RZqBHr1kn9b+vQleQw24HHOxEMD5dVQRnxP yATuGD8DuCo3ifm1lj3HFUn6LKYyWoXmAj8N6Mop3hKYAWuf2aCbBk04mF6RvhE8LYjA ivRCfD0InhzYP+x3dVbTeK5eNER8qYJ/KFOJiJchYJsKyZdDo+JbXyBs6rbh1+qmSKbd LXXYsPTH7EglLNqJ0YoPwGoERn5s3tMTlU1zpJuCbdlgLYisvs/esySlZ7Lh6JO9D9L1 R4Jw== 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 j12si1504632ioj.39.2021.05.10.02.53.26; Mon, 10 May 2021 02:53:39 -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 S231191AbhEJJw1 (ORCPT + 99 others); Mon, 10 May 2021 05:52:27 -0400 Received: from fgw23-7.mail.saunalahti.fi ([62.142.5.84]:14398 "EHLO fgw23-7.mail.saunalahti.fi" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230483AbhEJJwN (ORCPT ); Mon, 10 May 2021 05:52:13 -0400 Received: from localhost (88-115-248-186.elisa-laajakaista.fi [88.115.248.186]) by fgw23.mail.saunalahti.fi (Halon) with ESMTP id 3aa10d04-b175-11eb-8ccd-005056bdfda7; Mon, 10 May 2021 12:51:01 +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 04/28] leds: el15203000: Make error handling more robust Date: Mon, 10 May 2021 12:50:21 +0300 Message-Id: <20210510095045.3299382-5-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-el15203000.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/leds/leds-el15203000.c b/drivers/leds/leds-el15203000.c index 912451db05e6..bcdbbbc9c187 100644 --- a/drivers/leds/leds-el15203000.c +++ b/drivers/leds/leds-el15203000.c @@ -246,16 +246,13 @@ static int el15203000_probe_dt(struct el15203000 *priv) ret = fwnode_property_read_u32(child, "reg", &led->reg); if (ret) { dev_err(priv->dev, "LED without ID number"); - fwnode_handle_put(child); - - break; + goto err_child_out; } if (led->reg > U8_MAX) { dev_err(priv->dev, "LED value %d is invalid", led->reg); - fwnode_handle_put(child); - - return -EINVAL; + ret = -EINVAL; + goto err_child_out; } led->priv = priv; @@ -277,14 +274,16 @@ static int el15203000_probe_dt(struct el15203000 *priv) dev_err(priv->dev, "failed to register LED device %s, err %d", led->ldev.name, ret); - fwnode_handle_put(child); - - break; + goto err_child_out; } led++; } + return 0; + +err_child_out: + fwnode_handle_put(child); return ret; } -- 2.31.1