diff options
author | Julia Lawall <julia.lawall@lip6.fr> | 2015-11-18 23:04:12 +0100 |
---|---|---|
committer | Brian Norris <computersforpeace@gmail.com> | 2015-12-01 02:55:03 +0100 |
commit | a81c0f07b4a7559eecebf77bcc1956d9d777b006 (patch) | |
tree | 5e99a4563615f409b52eae996d418fec79fdd1a4 /drivers/mtd/nand/sunxi_nand.c | |
parent | mtd: brcmnand: improve memory management (diff) | |
download | linux-a81c0f07b4a7559eecebf77bcc1956d9d777b006.tar.xz linux-a81c0f07b4a7559eecebf77bcc1956d9d777b006.zip |
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@lip6.fr>
Acked-by: Chen-Yu Tsai <wens@csie.org>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Diffstat (limited to 'drivers/mtd/nand/sunxi_nand.c')
-rw-r--r-- | drivers/mtd/nand/sunxi_nand.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/mtd/nand/sunxi_nand.c b/drivers/mtd/nand/sunxi_nand.c index 2ed52e466ea6..1bbcc0c2aab5 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; |