Message ID | 20240927-leds_device_for_each_child_node_scoped-v1-16-95c0614b38c8@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | leds: switch to device_for_each_child_node_scoped() | expand |
Fri, Sep 27, 2024 at 01:21:07AM +0200, Javier Carrasco kirjoitti: > Switch to device_for_each_child_node_scoped() to simplify the code by > removing the need for calls to fwnode_handle_put() in the error path. > > This also prevents possible memory leaks if new error paths are added > without the required call to fwnode_handle_put(). ... > ret = fwnode_property_read_u32(child, "reg", ®); > - if (ret || reg >= NUM_LEDS) { > - fwnode_handle_put(child); > + if (ret || reg >= NUM_LEDS) > return ERR_PTR(ret ? : -EINVAL); > - } It's now two nested conditionals instead of two independent ones: if (ret) return ERR_PTR(ret); if (reg >= NUM_LEDS) return ERR_PTR(-EINVAL); I believe my wariant is much better to read, understand, and maintain.
diff --git a/drivers/leds/leds-tca6507.c b/drivers/leds/leds-tca6507.c index 4f22f4224946..acbd8169723c 100644 --- a/drivers/leds/leds-tca6507.c +++ b/drivers/leds/leds-tca6507.c @@ -658,7 +658,6 @@ static struct tca6507_platform_data * tca6507_led_dt_init(struct device *dev) { struct tca6507_platform_data *pdata; - struct fwnode_handle *child; struct led_info *tca_leds; int count; @@ -671,7 +670,7 @@ tca6507_led_dt_init(struct device *dev) if (!tca_leds) return ERR_PTR(-ENOMEM); - device_for_each_child_node(dev, child) { + device_for_each_child_node_scoped(dev, child) { struct led_info led; u32 reg; int ret; @@ -688,10 +687,8 @@ tca6507_led_dt_init(struct device *dev) led.flags |= TCA6507_MAKE_GPIO; ret = fwnode_property_read_u32(child, "reg", ®); - if (ret || reg >= NUM_LEDS) { - fwnode_handle_put(child); + if (ret || reg >= NUM_LEDS) return ERR_PTR(ret ? : -EINVAL); - } tca_leds[reg] = led; }
Switch to device_for_each_child_node_scoped() to simplify the code by removing the need for calls to fwnode_handle_put() in the error path. This also prevents possible memory leaks if new error paths are added without the required call to fwnode_handle_put(). Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com> --- drivers/leds/leds-tca6507.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)