Re: [PATCH] leds: leds-is31fl32xx: fix an error in is31fl32xx_parse_dt()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, 5 Jun 2021 15:49:10 +0300
Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote:

> Return -EBUSY if the data is already in use (instead of returning
> success).
> 
> Fixes: 9d7cffaf99f5 ("leds: Add driver for the ISSI IS31FL32xx family of LED controllers")
> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> ---
> Not tested.  It prints an error so the intention seems clear, but
> sometimes making stuff a failure instead of a success can lead to
> unexpected problems in production.  On the other hand, if this is not
> an error then shouldn't we do a continue instead of a goto err?

I originally had it continue (and ignore that LED), but during review 
Jacek commented [1] that he preferred it to be an error condition 
instead. It should be noted that this condition involves an invalid 
devicetree: two (or more) LED sub-nodes on the same controller that 
specify the same controller channel number. FYI, the error message 
originally had a bit more detail which might make that more obvious, 
but it was simplified as part of another cleanup [2]. 

In any event, the end result is that the whole controller will fail to 
probe, and none of it's LEDs will be available. Because it's not a 
temporary condition, I don't think -EBUSY is the appropriate return 
value. 
There happened to be another patch recently that used -EINVAL [3],
which I think is more appropriate.

[1] https://lore.kernel.org/linux-leds/56CDD4AA.5030801@xxxxxxxxxxx/
[2] https://lore.kernel.org/linux-leds/20200917223338.14164-25-marek.behun@xxxxxx/
[2] https://lore.kernel.org/linux-leds/1622545743-21240-1-git-send-email-jiapeng.chong@xxxxxxxxxxxxxxxxx/

> 
>  drivers/leds/leds-is31fl32xx.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/leds/leds-is31fl32xx.c b/drivers/leds/leds-is31fl32xx.c
> index 3b55af9a8c58..e6f34464914f 100644
> --- a/drivers/leds/leds-is31fl32xx.c
> +++ b/drivers/leds/leds-is31fl32xx.c
> @@ -386,6 +386,7 @@ static int is31fl32xx_parse_dt(struct device *dev,
>  			dev_err(dev,
>  				"Node %pOF 'reg' conflicts with another LED\n",
>  				child);
> +			ret = -EBUSY;
>  			goto err;
>  		}
>  





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux