From: Julia Lawall Date: Wed, 23 May 2018 19:07:15 +0000 (+0200) Subject: PCI: pnv_php: Add missing of_node_put() X-Git-Tag: v4.18-rc1~106^2~19^2~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5d9c6b8ae987c7207ee665be81c4ad04949ad15a;p=thirdparty%2Fkernel%2Flinux.git 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): // @@ 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 // Signed-off-by: Julia Lawall Signed-off-by: Bjorn Helgaas --- diff --git a/drivers/pci/hotplug/pnv_php.c b/drivers/pci/hotplug/pnv_php.c index d44100687dfea..6c2e8d7307c6b 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;