Fri, Sep 27, 2024 at 01:21:06AM +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 paths. > > This also prevents possible memory leaks if new error paths are added > without the required call to fwnode_handle_put(). > > The error handling after 'err_put_child' has been moved to the only goto > that jumps to it (second device_for_each_child_node()), and the call to > fwnode_handle_put() has been removed accordingly. ... > ret = fwnode_property_read_u32(child, "reg", &addr); > - if (ret || addr >= LEDC_MAX_LEDS) { > - fwnode_handle_put(child); > + if (ret || addr >= LEDC_MAX_LEDS) > return dev_err_probe(dev, -EINVAL, "'reg' must be between 0 and %d\n", > LEDC_MAX_LEDS - 1); > - } This is a misleading message, what should be done is to split them: if (ret) reutrn ret; if (addr >= LEDC_MAX_LEDS) return dev_err_probe(dev, -EINVAL, "'reg' must be between 0 and %d\n", LEDC_MAX_LEDS - 1); > ret = fwnode_property_read_u32(child, "color", &color); > - if (ret || color != LED_COLOR_ID_RGB) { > - fwnode_handle_put(child); > + if (ret || color != LED_COLOR_ID_RGB) > return dev_err_probe(dev, -EINVAL, "'color' must be LED_COLOR_ID_RGB\n"); > - } Ditto. -- With Best Regards, Andy Shevchenko