Hi Laurent, On 11/08/2020 21:59, Laurent Pinchart wrote: > The fwnode reference corresponding to the endpoint is leaked in an error > path of the rcar_drif_parse_subdevs() function. Fix it, and reorganize > fwnode reference handling in the function to release references early, > simplifying error paths. > > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx> Simplified indeed. Reviewed-by: Kieran Bingham <kieran.bingham+renesas@xxxxxxxxxxxxxxxx> > --- > drivers/media/platform/rcar_drif.c | 16 +++++----------- > 1 file changed, 5 insertions(+), 11 deletions(-) > > diff --git a/drivers/media/platform/rcar_drif.c b/drivers/media/platform/rcar_drif.c > index 3d2451ac347d..3f1e5cb8b197 100644 > --- a/drivers/media/platform/rcar_drif.c > +++ b/drivers/media/platform/rcar_drif.c > @@ -1227,28 +1227,22 @@ static int rcar_drif_parse_subdevs(struct rcar_drif_sdr *sdr) > if (!ep) > return 0; > > + /* Get the endpoint properties */ > + rcar_drif_get_ep_properties(sdr, ep); > + > fwnode = fwnode_graph_get_remote_port_parent(ep); > + fwnode_handle_put(ep); > if (!fwnode) { > dev_warn(sdr->dev, "bad remote port parent\n"); > - fwnode_handle_put(ep); > return -EINVAL; > } > > sdr->ep.asd.match.fwnode = fwnode; > sdr->ep.asd.match_type = V4L2_ASYNC_MATCH_FWNODE; > ret = v4l2_async_notifier_add_subdev(notifier, &sdr->ep.asd); > - if (ret) { > - fwnode_handle_put(fwnode); > - return ret; > - } > - > - /* Get the endpoint properties */ > - rcar_drif_get_ep_properties(sdr, ep); > - > fwnode_handle_put(fwnode); > - fwnode_handle_put(ep); > > - return 0; > + return ret; > } > > /* Check if the given device is the primary bond */ >