mtd: nand: sunxi: add missing of_node_put

Linux-MTD Mailing List linux-mtd at lists.infradead.org
Tue Jan 12 15:59:11 PST 2016


Gitweb:     http://git.infradead.org/?p=mtd-2.6.git;a=commit;h=a81c0f07b4a7559eecebf77bcc1956d9d777b006
Commit:     a81c0f07b4a7559eecebf77bcc1956d9d777b006
Parent:     081976bcc0cbc84f5164fb7aa0e5cf597df6de9e
Author:     Julia Lawall <julia.lawall at lip6.fr>
AuthorDate: Wed Nov 18 23:04:12 2015 +0100
Committer:  Brian Norris <computersforpeace at gmail.com>
CommitDate: Mon Nov 30 17:55:03 2015 -0800

    mtd: nand: sunxi: add missing of_node_put
    
    for_each_child_of_node performs an of_node_get on each iteration, so
    a break out of the loop requires an of_node_put.
    
    A simplified version of the semantic patch that fixes this problem is as
    follows (http://coccinelle.lip6.fr):
    
    // <smpl>
    @@
    expression root,e;
    local idexpression child;
    @@
    
     for_each_child_of_node(root, child) {
       ... when != of_node_put(child)
           when != e = child
    (
       return child;
    |
    +  of_node_put(child);
    ?  return ...;
    )
       ...
     }
    // </smpl>
    
    Signed-off-by: Julia Lawall <Julia.Lawall at lip6.fr>
    Acked-by: Chen-Yu Tsai <wens at csie.org>
    Acked-by: Boris Brezillon <boris.brezillon at free-electrons.com>
    Signed-off-by: Brian Norris <computersforpeace at gmail.com>
---
 drivers/mtd/nand/sunxi_nand.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c
index 2ed52e4..1bbcc0c 100644
--- a/drivers/mtd/nand/sunxi_nand.c
+++ b/drivers/mtd/nand/sunxi_nand.c
@@ -1391,8 +1391,10 @@ static int sunxi_nand_chips_init(struct device *dev, struct sunxi_nfc *nfc)
 
 	for_each_child_of_node(np, nand_np) {
 		ret = sunxi_nand_chip_init(dev, nfc, nand_np);
-		if (ret)
+		if (ret) {
+			of_node_put(nand_np);
 			return ret;
+		}
 	}
 
 	return 0;



More information about the linux-mtd-cvs mailing list