All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 12/12] kernel/trace: Add missing unlock
@ 2010-03-29 15:37 ` Julia Lawall
  0 siblings, 0 replies; 5+ messages in thread
From: Julia Lawall @ 2010-03-29 15:37 UTC (permalink / raw)
  To: Steven Rostedt, Frederic Weisbecker, Ingo Molnar, linux-kernel,
	kernel-janitors

From: Julia Lawall <julia@diku.dk>

In some error handling cases the lock is not unlocked.  The return is
converted to a goto, to share the unlock at the end of the function.

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

// <smpl>
@r exists@
expression E1;
identifier f;
@@

f (...) { <+...
* spin_lock_irq (E1,...);
... when != E1
* return ...;
...+> }
// </smpl>

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

---
 kernel/trace/ring_buffer.c          |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 05a9f83..cd2e1d8 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1201,18 +1201,19 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
 
 	for (i = 0; i < nr_pages; i++) {
 		if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
-			return;
+			goto out;
 		p = cpu_buffer->pages->next;
 		bpage = list_entry(p, struct buffer_page, list);
 		list_del_init(&bpage->list);
 		free_buffer_page(bpage);
 	}
 	if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
-		return;
+		goto out;
 
 	rb_reset_cpu(cpu_buffer);
 	rb_check_pages(cpu_buffer);
 
+out:
 	spin_unlock_irq(&cpu_buffer->reader_lock);
 }
 
@@ -1229,7 +1230,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
 
 	for (i = 0; i < nr_pages; i++) {
 		if (RB_WARN_ON(cpu_buffer, list_empty(pages)))
-			return;
+			goto out;
 		p = pages->next;
 		bpage = list_entry(p, struct buffer_page, list);
 		list_del_init(&bpage->list);
@@ -1238,6 +1239,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
 	rb_reset_cpu(cpu_buffer);
 	rb_check_pages(cpu_buffer);
 
+out:
 	spin_unlock_irq(&cpu_buffer->reader_lock);
 }
 

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 12/12] kernel/trace: Add missing unlock
@ 2010-03-29 15:37 ` Julia Lawall
  0 siblings, 0 replies; 5+ messages in thread
From: Julia Lawall @ 2010-03-29 15:37 UTC (permalink / raw)
  To: Steven Rostedt, Frederic Weisbecker, Ingo Molnar, linux-kernel,
	kernel-janitors

From: Julia Lawall <julia@diku.dk>

In some error handling cases the lock is not unlocked.  The return is
converted to a goto, to share the unlock at the end of the function.

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

// <smpl>
@r exists@
expression E1;
identifier f;
@@

f (...) { <+...
* spin_lock_irq (E1,...);
... when != E1
* return ...;
...+> }
// </smpl>

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

---
 kernel/trace/ring_buffer.c          |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index 05a9f83..cd2e1d8 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1201,18 +1201,19 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
 
 	for (i = 0; i < nr_pages; i++) {
 		if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
-			return;
+			goto out;
 		p = cpu_buffer->pages->next;
 		bpage = list_entry(p, struct buffer_page, list);
 		list_del_init(&bpage->list);
 		free_buffer_page(bpage);
 	}
 	if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
-		return;
+		goto out;
 
 	rb_reset_cpu(cpu_buffer);
 	rb_check_pages(cpu_buffer);
 
+out:
 	spin_unlock_irq(&cpu_buffer->reader_lock);
 }
 
@@ -1229,7 +1230,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
 
 	for (i = 0; i < nr_pages; i++) {
 		if (RB_WARN_ON(cpu_buffer, list_empty(pages)))
-			return;
+			goto out;
 		p = pages->next;
 		bpage = list_entry(p, struct buffer_page, list);
 		list_del_init(&bpage->list);
@@ -1238,6 +1239,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
 	rb_reset_cpu(cpu_buffer);
 	rb_check_pages(cpu_buffer);
 
+out:
 	spin_unlock_irq(&cpu_buffer->reader_lock);
 }
 

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 12/12] kernel/trace: Add missing unlock
  2010-03-29 15:37 ` Julia Lawall
@ 2010-03-29 18:20   ` Steven Rostedt
  -1 siblings, 0 replies; 5+ messages in thread
From: Steven Rostedt @ 2010-03-29 18:20 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Frederic Weisbecker, Ingo Molnar, linux-kernel, kernel-janitors

On Mon, 2010-03-29 at 17:37 +0200, Julia Lawall wrote:
> From: Julia Lawall <julia@diku.dk>
> 
> In some error handling cases the lock is not unlocked.  The return is
> converted to a goto, to share the unlock at the end of the function.
> 
> A simplified version of the semantic patch that finds this problem is as
> follows: (http://coccinelle.lip6.fr/)
> 
> // <smpl>
> @r exists@
> expression E1;
> identifier f;
> @@
> 
> f (...) { <+...
> * spin_lock_irq (E1,...);
> ... when != E1
> * return ...;
> ...+> }
> // </smpl>
> 
> Signed-off-by: Julia Lawall <julia@diku.dk>

Applied, thanks!

-- Steve

> ---
>  kernel/trace/ring_buffer.c          |    8 +++++---
>  1 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
> index 05a9f83..cd2e1d8 100644
> --- a/kernel/trace/ring_buffer.c
> +++ b/kernel/trace/ring_buffer.c
> @@ -1201,18 +1201,19 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
>  
>  	for (i = 0; i < nr_pages; i++) {
>  		if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
> -			return;
> +			goto out;
>  		p = cpu_buffer->pages->next;
>  		bpage = list_entry(p, struct buffer_page, list);
>  		list_del_init(&bpage->list);
>  		free_buffer_page(bpage);
>  	}
>  	if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
> -		return;
> +		goto out;
>  
>  	rb_reset_cpu(cpu_buffer);
>  	rb_check_pages(cpu_buffer);
>  
> +out:
>  	spin_unlock_irq(&cpu_buffer->reader_lock);
>  }
>  
> @@ -1229,7 +1230,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
>  
>  	for (i = 0; i < nr_pages; i++) {
>  		if (RB_WARN_ON(cpu_buffer, list_empty(pages)))
> -			return;
> +			goto out;
>  		p = pages->next;
>  		bpage = list_entry(p, struct buffer_page, list);
>  		list_del_init(&bpage->list);
> @@ -1238,6 +1239,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
>  	rb_reset_cpu(cpu_buffer);
>  	rb_check_pages(cpu_buffer);
>  
> +out:
>  	spin_unlock_irq(&cpu_buffer->reader_lock);
>  }
>  



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH 12/12] kernel/trace: Add missing unlock
@ 2010-03-29 18:20   ` Steven Rostedt
  0 siblings, 0 replies; 5+ messages in thread
From: Steven Rostedt @ 2010-03-29 18:20 UTC (permalink / raw)
  To: Julia Lawall
  Cc: Frederic Weisbecker, Ingo Molnar, linux-kernel, kernel-janitors

On Mon, 2010-03-29 at 17:37 +0200, Julia Lawall wrote:
> From: Julia Lawall <julia@diku.dk>
> 
> In some error handling cases the lock is not unlocked.  The return is
> converted to a goto, to share the unlock at the end of the function.
> 
> A simplified version of the semantic patch that finds this problem is as
> follows: (http://coccinelle.lip6.fr/)
> 
> // <smpl>
> @r exists@
> expression E1;
> identifier f;
> @@
> 
> f (...) { <+...
> * spin_lock_irq (E1,...);
> ... when != E1
> * return ...;
> ...+> }
> // </smpl>
> 
> Signed-off-by: Julia Lawall <julia@diku.dk>

Applied, thanks!

-- Steve

> ---
>  kernel/trace/ring_buffer.c          |    8 +++++---
>  1 files changed, 5 insertions(+), 3 deletions(-)
> 
> diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
> index 05a9f83..cd2e1d8 100644
> --- a/kernel/trace/ring_buffer.c
> +++ b/kernel/trace/ring_buffer.c
> @@ -1201,18 +1201,19 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
>  
>  	for (i = 0; i < nr_pages; i++) {
>  		if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
> -			return;
> +			goto out;
>  		p = cpu_buffer->pages->next;
>  		bpage = list_entry(p, struct buffer_page, list);
>  		list_del_init(&bpage->list);
>  		free_buffer_page(bpage);
>  	}
>  	if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
> -		return;
> +		goto out;
>  
>  	rb_reset_cpu(cpu_buffer);
>  	rb_check_pages(cpu_buffer);
>  
> +out:
>  	spin_unlock_irq(&cpu_buffer->reader_lock);
>  }
>  
> @@ -1229,7 +1230,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
>  
>  	for (i = 0; i < nr_pages; i++) {
>  		if (RB_WARN_ON(cpu_buffer, list_empty(pages)))
> -			return;
> +			goto out;
>  		p = pages->next;
>  		bpage = list_entry(p, struct buffer_page, list);
>  		list_del_init(&bpage->list);
> @@ -1238,6 +1239,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
>  	rb_reset_cpu(cpu_buffer);
>  	rb_check_pages(cpu_buffer);
>  
> +out:
>  	spin_unlock_irq(&cpu_buffer->reader_lock);
>  }
>  



^ permalink raw reply	[flat|nested] 5+ messages in thread

* [tip:tracing/urgent] ring-buffer: Add missing unlock
  2010-03-29 15:37 ` Julia Lawall
  (?)
  (?)
@ 2010-04-03  9:28 ` tip-bot for Julia Lawall
  -1 siblings, 0 replies; 5+ messages in thread
From: tip-bot for Julia Lawall @ 2010-04-03  9:28 UTC (permalink / raw)
  To: linux-tip-commits; +Cc: linux-kernel, julia, hpa, mingo, rostedt, tglx

Commit-ID:  292f60c0c4ab44aa2d589ba03c12e64a3b3c5e38
Gitweb:     http://git.kernel.org/tip/292f60c0c4ab44aa2d589ba03c12e64a3b3c5e38
Author:     Julia Lawall <julia@diku.dk>
AuthorDate: Mon, 29 Mar 2010 17:37:02 +0200
Committer:  Steven Rostedt <rostedt@goodmis.org>
CommitDate: Mon, 29 Mar 2010 15:23:24 -0400

ring-buffer: Add missing unlock

In some error handling cases the lock is not unlocked.  The return is
converted to a goto, to share the unlock at the end of the function.

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

// <smpl>
@r exists@
expression E1;
identifier f;
@@

f (...) { <+...
* spin_lock_irq (E1,...);
... when != E1
* return ...;
...+> }
// </smpl>

Signed-off-by: Julia Lawall <julia@diku.dk>
LKML-Reference: <Pine.LNX.4.64.1003291736440.21896@ask.diku.dk>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 kernel/trace/ring_buffer.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index d1187ef..9a0f9bf 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -1209,18 +1209,19 @@ rb_remove_pages(struct ring_buffer_per_cpu *cpu_buffer, unsigned nr_pages)
 
 	for (i = 0; i < nr_pages; i++) {
 		if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
-			return;
+			goto out;
 		p = cpu_buffer->pages->next;
 		bpage = list_entry(p, struct buffer_page, list);
 		list_del_init(&bpage->list);
 		free_buffer_page(bpage);
 	}
 	if (RB_WARN_ON(cpu_buffer, list_empty(cpu_buffer->pages)))
-		return;
+		goto out;
 
 	rb_reset_cpu(cpu_buffer);
 	rb_check_pages(cpu_buffer);
 
+out:
 	spin_unlock_irq(&cpu_buffer->reader_lock);
 }
 
@@ -1237,7 +1238,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
 
 	for (i = 0; i < nr_pages; i++) {
 		if (RB_WARN_ON(cpu_buffer, list_empty(pages)))
-			return;
+			goto out;
 		p = pages->next;
 		bpage = list_entry(p, struct buffer_page, list);
 		list_del_init(&bpage->list);
@@ -1246,6 +1247,7 @@ rb_insert_pages(struct ring_buffer_per_cpu *cpu_buffer,
 	rb_reset_cpu(cpu_buffer);
 	rb_check_pages(cpu_buffer);
 
+out:
 	spin_unlock_irq(&cpu_buffer->reader_lock);
 }
 

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2010-04-03  9:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-29 15:37 [PATCH 12/12] kernel/trace: Add missing unlock Julia Lawall
2010-03-29 15:37 ` Julia Lawall
2010-03-29 18:20 ` Steven Rostedt
2010-03-29 18:20   ` Steven Rostedt
2010-04-03  9:28 ` [tip:tracing/urgent] ring-buffer: " tip-bot for Julia Lawall

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.