mtd: brcmnand: improve memory management
authorJulia Lawall <julia.lawall@lip6.fr>
Thu, 19 Nov 2015 21:32:15 +0000 (22:32 +0100)
committerBrian Norris <computersforpeace@gmail.com>
Tue, 1 Dec 2015 01:54:05 +0000 (17:54 -0800)
commit081976bcc0cbc84f5164fb7aa0e5cf597df6de9e
tree3b35aae88d50e0ef1bd590535fc78bc35957eba6
parent0401669797488feb055521cade69b1d0e81669db
mtd: brcmnand: improve memory management

This patch addresses two related memory management issues in the probe
function:

1. for_each_available_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_available_child_of_node(root, child) {
   ... when != of_node_put(child)
       when != e = child
(
   return child;
|
+  of_node_put(child);
?  return ...;
)
   ...
 }
// </smpl>

2. The devm_kzalloc'd data is not used if brcmnand_init_cs fails.  Free it
immediately, using devm_kfree in this case, instead of waiting for the
remove function.

Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/nand/brcmnand/brcmnand.c