Nathan Lynch <nath...@linux.ibm.com> writes: > In pseries_devicetree_update(), with each call to ibm,update-nodes the > partition firmware communicates the node to be deleted or updated by > placing its phandle in the work buffer. Each of delete_dt_node(), > update_dt_node(), and add_dt_node() have duplicate lookups using the > phandle value and corresponding refcount management.
... I noticed that this introduces a reference count imbalance in an error path: > -static int add_dt_node(__be32 parent_phandle, __be32 drc_index) > +static int add_dt_node(struct device_node *parent_dn, __be32 drc_index) > { > struct device_node *dn; > - struct device_node *parent_dn; > int rc; > > - parent_dn = of_find_node_by_phandle(be32_to_cpu(parent_phandle)); > - if (!parent_dn) > - return -ENOENT; > - > dn = dlpar_configure_connector(drc_index, parent_dn); > if (!dn) { > of_node_put(parent_dn); here: ^^^ > @@ -251,7 +230,6 @@ static int add_dt_node(__be32 parent_phandle, __be32 > drc_index) > > pr_debug("added node %pOFfp\n", dn); > > - of_node_put(parent_dn); > return rc; > } The change correctly removes the of_node_put() from the happy path but the put in the error branch should have been removed too.