Patchwork [4/4] sound/aoa/fabrics/layout.c: remove unneeded kfree

login
register
mail settings
Submitter Julia Lawall
Date Aug. 20, 2011, 6:12 a.m.
Message ID <1313820761-12042-4-git-send-email-julia@diku.dk>
Download mbox | patch
Permalink /patch/110757/
State Not Applicable
Headers show

Comments

Julia Lawall - Aug. 20, 2011, 6:12 a.m.
From: Julia Lawall <julia@diku.dk>

The label outnodev is only used when kzalloc has not yet taken place or has
failed, so there is no need for the call for kfree under this label.

A simplified version of the semantic match that finds this problem is as
follows: (http://coccinelle.lip6.fr/)

// <smpl>
@@
identifier x;
expression E1!=0,E2,E3,E4;
statement S;
iterator I;
@@

(
if (...) { ... when != kfree(x)
               when != x = E3
               when != E3 = x
*  return ...;
 }
... when != x = E2
    when != I(...,x,...) S
if (...) { ... when != x = E4
 kfree(x); ... return ...; }
)
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>

---
 sound/aoa/fabrics/layout.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Takashi Iwai - Aug. 20, 2011, 7:30 a.m.
At Sat, 20 Aug 2011 08:12:41 +0200,
Julia Lawall wrote:
> 
> From: Julia Lawall <julia@diku.dk>
> 
> The label outnodev is only used when kzalloc has not yet taken place or has
> failed, so there is no need for the call for kfree under this label.
> 
> A simplified version of the semantic match that finds this problem is as
> follows: (http://coccinelle.lip6.fr/)
> 
> // <smpl>
> @@
> identifier x;
> expression E1!=0,E2,E3,E4;
> statement S;
> iterator I;
> @@
> 
> (
> if (...) { ... when != kfree(x)
>                when != x = E3
>                when != E3 = x
> *  return ...;
>  }
> ... when != x = E2
>     when != I(...,x,...) S
> if (...) { ... when != x = E4
>  kfree(x); ... return ...; }
> )
> // </smpl>
> 
> Signed-off-by: Julia Lawall <julia@diku.dk>

Thanks, applied this one.
The rest three are left for review by Mark & Liam.


Takashi



> ---
>  sound/aoa/fabrics/layout.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/sound/aoa/fabrics/layout.c b/sound/aoa/fabrics/layout.c
> index 3fd1a7e..552b97a 100644
> --- a/sound/aoa/fabrics/layout.c
> +++ b/sound/aoa/fabrics/layout.c
> @@ -1073,10 +1073,10 @@ static int aoa_fabric_layout_probe(struct soundbus_dev *sdev)
>  	sdev->pcmid = -1;
>  	list_del(&ldev->list);
>  	layouts_list_items--;
> +	kfree(ldev);
>   outnodev:
>   	of_node_put(sound);
>   	layout_device = NULL;
> - 	kfree(ldev);
>  	return -ENODEV;
>  }
>  
>

Patch

diff --git a/sound/aoa/fabrics/layout.c b/sound/aoa/fabrics/layout.c
index 3fd1a7e..552b97a 100644
--- a/sound/aoa/fabrics/layout.c
+++ b/sound/aoa/fabrics/layout.c
@@ -1073,10 +1073,10 @@  static int aoa_fabric_layout_probe(struct soundbus_dev *sdev)
 	sdev->pcmid = -1;
 	list_del(&ldev->list);
 	layouts_list_items--;
+	kfree(ldev);
  outnodev:
  	of_node_put(sound);
  	layout_device = NULL;
- 	kfree(ldev);
 	return -ENODEV;
 }