* [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 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.