On Tue, 3 Nov 2020 19:23:23 +0800 Yu Kuai wrote: > --- a/drivers/net/ethernet/freescale/fman/fman_port.c > +++ b/drivers/net/ethernet/freescale/fman/fman_port.c > @@ -1792,20 +1792,21 @@ static int fman_port_probe(struct platform_device > *of_dev) > if (!fm_node) { > dev_err(port->dev, "%s: of_get_parent() failed\n", __func__); > err = -ENODEV; > - goto return_err; > + goto free_port; > } > > + of_node_put(port_node); > fm_pdev = of_find_device_by_node(fm_node); > of_node_put(fm_node); > if (!fm_pdev) { > err = -EINVAL; > - goto return_err; > + goto free_port; > }
This is not right either. I just asked you fix up the order of the error path, not move the of_node_put() in the body of the function. Now you're releasing the reference on the object and still use it after.