public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] ring_buffer: fix typing mistake
@ 2009-02-09  6:21 Lai Jiangshan
  2009-02-09 14:18 ` Steven Rostedt
  0 siblings, 1 reply; 4+ messages in thread
From: Lai Jiangshan @ 2009-02-09  6:21 UTC (permalink / raw)
  To: Steven Rostedt, Ingo Molnar, Linux Kernel Mailing List


Impact: Fix bug

I found several very very curious line.
It's so curious that it may be brought by typing mistake.

When (cpu_buffer->reader_page == cpu_buffer->commit_page):

1) We haven't copied it for bpage is changed:
   bpage = cpu_buffer->reader_page->page;
   memcpy(bpage->data, cpu_buffer->reader_page->page->data + read ... )
2) We need update cpu_buffer->reader_page->read, but
   "cpu_buffer->reader_page += read;" is not right.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
 ring_buffer.c |    9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index bd38c5c..e97acae 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -2377,7 +2377,7 @@ void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data)
  * to swap with a page in the ring buffer.
  *
  * for example:
- *	rpage = ring_buffer_alloc_page(buffer);
+ *	rpage = ring_buffer_alloc_read_page(buffer);
  *	if (!rpage)
  *		return error;
  *	ret = ring_buffer_read_page(buffer, &rpage, cpu, 0);
@@ -2432,18 +2432,17 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
 	 */
 	if (cpu_buffer->reader_page == cpu_buffer->commit_page) {
 		unsigned int read = cpu_buffer->reader_page->read;
+		unsigned int commit = rb_page_commit(cpu_buffer->reader_page);
 
 		if (full)
 			goto out;
 		/* The writer is still on the reader page, we must copy */
-		bpage = cpu_buffer->reader_page->page;
 		memcpy(bpage->data,
 		       cpu_buffer->reader_page->page->data + read,
-		       local_read(&bpage->commit) - read);
+		       commit - read);
 
 		/* consume what was read */
-		cpu_buffer->reader_page += read;
-
+		cpu_buffer->reader_page->read = commit;
 	} else {
 		/* swap the pages */
 		rb_init_page(bpage);




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

* Re: [PATCH 1/2] ring_buffer: fix typing mistake
  2009-02-09  6:21 [PATCH 1/2] ring_buffer: fix typing mistake Lai Jiangshan
@ 2009-02-09 14:18 ` Steven Rostedt
  2009-02-09 14:20   ` Ingo Molnar
  0 siblings, 1 reply; 4+ messages in thread
From: Steven Rostedt @ 2009-02-09 14:18 UTC (permalink / raw)
  To: Lai Jiangshan; +Cc: Ingo Molnar, Linux Kernel Mailing List


On Mon, 9 Feb 2009, Lai Jiangshan wrote:

> 
> Impact: Fix bug
> 
> I found several very very curious line.
> It's so curious that it may be brought by typing mistake.
> 
> When (cpu_buffer->reader_page == cpu_buffer->commit_page):
> 
> 1) We haven't copied it for bpage is changed:
>    bpage = cpu_buffer->reader_page->page;
>    memcpy(bpage->data, cpu_buffer->reader_page->page->data + read ... )
> 2) We need update cpu_buffer->reader_page->read, but
>    "cpu_buffer->reader_page += read;" is not right.

Ouch! That is a bug.

Ingo, this is an urgent fix. Want me to pull it in and send it off to you?

-- Steve


> 
> Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
> ---
>  ring_buffer.c |    9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
> index bd38c5c..e97acae 100644
> --- a/kernel/trace/ring_buffer.c
> +++ b/kernel/trace/ring_buffer.c
> @@ -2377,7 +2377,7 @@ void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data)
>   * to swap with a page in the ring buffer.
>   *
>   * for example:
> - *	rpage = ring_buffer_alloc_page(buffer);
> + *	rpage = ring_buffer_alloc_read_page(buffer);
>   *	if (!rpage)
>   *		return error;
>   *	ret = ring_buffer_read_page(buffer, &rpage, cpu, 0);
> @@ -2432,18 +2432,17 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
>  	 */
>  	if (cpu_buffer->reader_page == cpu_buffer->commit_page) {
>  		unsigned int read = cpu_buffer->reader_page->read;
> +		unsigned int commit = rb_page_commit(cpu_buffer->reader_page);
>  
>  		if (full)
>  			goto out;
>  		/* The writer is still on the reader page, we must copy */
> -		bpage = cpu_buffer->reader_page->page;
>  		memcpy(bpage->data,
>  		       cpu_buffer->reader_page->page->data + read,
> -		       local_read(&bpage->commit) - read);
> +		       commit - read);
>  
>  		/* consume what was read */
> -		cpu_buffer->reader_page += read;
> -
> +		cpu_buffer->reader_page->read = commit;
>  	} else {
>  		/* swap the pages */
>  		rb_init_page(bpage);
> 
> 
> 
> 
> 

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

* Re: [PATCH 1/2] ring_buffer: fix typing mistake
  2009-02-09 14:18 ` Steven Rostedt
@ 2009-02-09 14:20   ` Ingo Molnar
  0 siblings, 0 replies; 4+ messages in thread
From: Ingo Molnar @ 2009-02-09 14:20 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: Lai Jiangshan, Linux Kernel Mailing List


* Steven Rostedt <rostedt@goodmis.org> wrote:

> 
> On Mon, 9 Feb 2009, Lai Jiangshan wrote:
> 
> > 
> > Impact: Fix bug
> > 
> > I found several very very curious line.
> > It's so curious that it may be brought by typing mistake.
> > 
> > When (cpu_buffer->reader_page == cpu_buffer->commit_page):
> > 
> > 1) We haven't copied it for bpage is changed:
> >    bpage = cpu_buffer->reader_page->page;
> >    memcpy(bpage->data, cpu_buffer->reader_page->page->data + read ... )
> > 2) We need update cpu_buffer->reader_page->read, but
> >    "cpu_buffer->reader_page += read;" is not right.
> 
> Ouch! That is a bug.
> 
> Ingo, this is an urgent fix. Want me to pull it in and send it off to you?

Please do, yes.

	Ingo

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

* [PATCH 1/2] ring_buffer: fix typing mistake
  2009-02-09 15:17 [PATCH 0/2] git pull request for tip/tracing/urgent Steven Rostedt
@ 2009-02-09 15:17 ` Steven Rostedt
  0 siblings, 0 replies; 4+ messages in thread
From: Steven Rostedt @ 2009-02-09 15:17 UTC (permalink / raw)
  To: linux-kernel; +Cc: Ingo Molnar, Andrew Morton, Lai Jiangshan, Steven Rostedt

[-- Attachment #1: 0001-ring_buffer-fix-typing-mistake.patch --]
[-- Type: text/plain, Size: 2169 bytes --]

From: Lai Jiangshan <laijs@cn.fujitsu.com>

Impact: Fix bug

I found several very very curious line.
It's so curious that it may be brought by typing mistake.

When (cpu_buffer->reader_page == cpu_buffer->commit_page):

1) We haven't copied it for bpage is changed:
   bpage = cpu_buffer->reader_page->page;
   memcpy(bpage->data, cpu_buffer->reader_page->page->data + read ... )
2) We need update cpu_buffer->reader_page->read, but
   "cpu_buffer->reader_page += read;" is not right.

[
  This bug was a typo. The commit->reader_page is a page pointer
  and not an index into the page. The line should have been
  commit->reader_page->read += read.  The other changes
  by Lai are nice clean ups to the code.  - SDR
]

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
 kernel/trace/ring_buffer.c |    9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index bd38c5c..e97acae 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -2377,7 +2377,7 @@ void ring_buffer_free_read_page(struct ring_buffer *buffer, void *data)
  * to swap with a page in the ring buffer.
  *
  * for example:
- *	rpage = ring_buffer_alloc_page(buffer);
+ *	rpage = ring_buffer_alloc_read_page(buffer);
  *	if (!rpage)
  *		return error;
  *	ret = ring_buffer_read_page(buffer, &rpage, cpu, 0);
@@ -2432,18 +2432,17 @@ int ring_buffer_read_page(struct ring_buffer *buffer,
 	 */
 	if (cpu_buffer->reader_page == cpu_buffer->commit_page) {
 		unsigned int read = cpu_buffer->reader_page->read;
+		unsigned int commit = rb_page_commit(cpu_buffer->reader_page);
 
 		if (full)
 			goto out;
 		/* The writer is still on the reader page, we must copy */
-		bpage = cpu_buffer->reader_page->page;
 		memcpy(bpage->data,
 		       cpu_buffer->reader_page->page->data + read,
-		       local_read(&bpage->commit) - read);
+		       commit - read);
 
 		/* consume what was read */
-		cpu_buffer->reader_page += read;
-
+		cpu_buffer->reader_page->read = commit;
 	} else {
 		/* swap the pages */
 		rb_init_page(bpage);
-- 
1.5.6.5

-- 

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

end of thread, other threads:[~2009-02-09 15:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-09  6:21 [PATCH 1/2] ring_buffer: fix typing mistake Lai Jiangshan
2009-02-09 14:18 ` Steven Rostedt
2009-02-09 14:20   ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2009-02-09 15:17 [PATCH 0/2] git pull request for tip/tracing/urgent Steven Rostedt
2009-02-09 15:17 ` [PATCH 1/2] ring_buffer: fix typing mistake Steven Rostedt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox