diff options
author | Julia Lawall <Julia.Lawall@lip6.fr> | 2018-05-23 21:07:15 +0200 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2018-05-23 16:48:37 -0500 |
commit | 5d9c6b8ae987c7207ee665be81c4ad04949ad15a (patch) | |
tree | 4ce20fe54f68c122a6188425ec7abf7f6c823201 /drivers/pci | |
parent | d22b362184553899f7d6b6760899a77d3b2d7c1b (diff) |
PCI: pnv_php: Add missing of_node_put()
The device node iterators perform an of_node_get() on each iteration, so a
jump out of the loop requires an of_node_put().
The semantic patch that fixes this problem is as follows
(http://coccinelle.lip6.fr):
// <smpl>
@@
expression root,e;
local idexpression child;
iterator name for_each_child_of_node;
@@
for_each_child_of_node(root, child) {
... when != of_node_put(child)
when != e = child
+ of_node_put(child);
? break;
...
}
... when != child
// </smpl>
Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/hotplug/pnv_php.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/pci/hotplug/pnv_php.c b/drivers/pci/hotplug/pnv_php.c index d44100687dfe..6c2e8d7307c6 100644 --- a/drivers/pci/hotplug/pnv_php.c +++ b/drivers/pci/hotplug/pnv_php.c @@ -220,12 +220,16 @@ static int pnv_php_populate_changeset(struct of_changeset *ocs, for_each_child_of_node(dn, child) { ret = of_changeset_attach_node(ocs, child); - if (ret) + if (ret) { + of_node_put(child); break; + } ret = pnv_php_populate_changeset(ocs, child); - if (ret) + if (ret) { + of_node_put(child); break; + } } return ret; |