Message ID | 20220721081202.1300071-1-windhl@126.com |
---|---|
State | New |
Headers | show |
Series | i2c: i2c-mux-gpmux: Add of_node_put() when breaking out of loop | expand |
Hi! 2022-07-21 at 10:12, Liang He wrote: > In i2c_mux_probe(), we should call of_node_put() when breaking out > of for_each_child_of_node() which will automatically increase and > decrease the refcount. > > Fixes: ac8498f0ce53 ("i2c: i2c-mux-gpmux: new driver") > Signed-off-by: Liang He <windhl@126.com> > --- > drivers/i2c/muxes/i2c-mux-gpmux.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c > index d3acd8d66c32..30ab2fe88c8d 100644 > --- a/drivers/i2c/muxes/i2c-mux-gpmux.c > +++ b/drivers/i2c/muxes/i2c-mux-gpmux.c > @@ -115,6 +115,7 @@ static int i2c_mux_probe(struct platform_device *pdev) > if (ret < 0) { > dev_err(dev, "no reg property for node '%pOFn'\n", > child); > + of_node_put(child); > goto err_children; > } > Right, but this is obviously incomplete. What about the other two branches in that loop that breaks out? Much better to have the missing of_node_put(child) statement below the err_children: label (i.e. before i2c_mux_del_adapters) so that it is not forgotten in any code flow. child cannot be uninitialized at that point and if it happens to be NULL, of_node_put will be a nop. So that's safe. Cheers, Peter
At 2022-07-21 17:20:56, "Peter Rosin" <peda@axentia.se> wrote: >Hi! > >2022-07-21 at 10:12, Liang He wrote: >> In i2c_mux_probe(), we should call of_node_put() when breaking out >> of for_each_child_of_node() which will automatically increase and >> decrease the refcount. >> >> Fixes: ac8498f0ce53 ("i2c: i2c-mux-gpmux: new driver") >> Signed-off-by: Liang He <windhl@126.com> >> --- >> drivers/i2c/muxes/i2c-mux-gpmux.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c >> index d3acd8d66c32..30ab2fe88c8d 100644 >> --- a/drivers/i2c/muxes/i2c-mux-gpmux.c >> +++ b/drivers/i2c/muxes/i2c-mux-gpmux.c >> @@ -115,6 +115,7 @@ static int i2c_mux_probe(struct platform_device *pdev) >> if (ret < 0) { >> dev_err(dev, "no reg property for node '%pOFn'\n", >> child); >> + of_node_put(child); >> goto err_children; >> } >> > >Right, but this is obviously incomplete. What about the other two branches >in that loop that breaks out? > >Much better to have the missing of_node_put(child) statement below the >err_children: label (i.e. before i2c_mux_del_adapters) so that it is not >forgotten in any code flow. child cannot be uninitialized at that point >and if it happens to be NULL, of_node_put will be a nop. So that's safe. > >Cheers, >Peter Thanks, Peter, I have forgotten add of_node_put() in other fail path. But your advice is better, I will send a new version soon! Thanks again, Liang
diff --git a/drivers/i2c/muxes/i2c-mux-gpmux.c b/drivers/i2c/muxes/i2c-mux-gpmux.c index d3acd8d66c32..30ab2fe88c8d 100644 --- a/drivers/i2c/muxes/i2c-mux-gpmux.c +++ b/drivers/i2c/muxes/i2c-mux-gpmux.c @@ -115,6 +115,7 @@ static int i2c_mux_probe(struct platform_device *pdev) if (ret < 0) { dev_err(dev, "no reg property for node '%pOFn'\n", child); + of_node_put(child); goto err_children; }
In i2c_mux_probe(), we should call of_node_put() when breaking out of for_each_child_of_node() which will automatically increase and decrease the refcount. Fixes: ac8498f0ce53 ("i2c: i2c-mux-gpmux: new driver") Signed-off-by: Liang He <windhl@126.com> --- drivers/i2c/muxes/i2c-mux-gpmux.c | 1 + 1 file changed, 1 insertion(+)