Message ID | 20250214123512.0631436e@gandalf.local.home (mailing list archive) |
---|---|
State | Accepted |
Commit | 97937834ae876f29565415ab15f1284666dc6be3 |
Headers | show |
Series | ring-buffer: Update pages_touched to reflect persistent buffer content | expand |
On Fri, 14 Feb 2025 12:35:12 -0500 Steven Rostedt <rostedt@goodmis.org> wrote: > From: Steven Rostedt <rostedt@goodmis.org> > > The pages_touched field represents the number of subbuffers in the ring > buffer that have content that can be read. This is used in accounting of > "dirty_pages" and "buffer_percent" to allow the user to wait for the > buffer to be filled to a certain amount before it reads the buffer in > blocking mode. > > The persistent buffer never updated this value so it was set to zero, and > this accounting would take it as it had no content. This would cause user > space to wait for content even though there's enough content in the ring > buffer that satisfies the buffer_percent. Looks good to me. Reviewed-by: Masami Hiramatsu (Google) <mhiramat@kernel.org> Thanks, > > Cc: stable@vger.kernel.org > Fixes: 5f3b6e839f3ce ("ring-buffer: Validate boot range memory events") > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> > --- > kernel/trace/ring_buffer.c | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c > index 0419d41a2060..bb6089c2951e 100644 > --- a/kernel/trace/ring_buffer.c > +++ b/kernel/trace/ring_buffer.c > @@ -1850,6 +1850,11 @@ static void rb_meta_validate_events(struct ring_buffer_per_cpu *cpu_buffer) > cpu_buffer->cpu); > goto invalid; > } > + > + /* If the buffer has content, update pages_touched */ > + if (ret) > + local_inc(&cpu_buffer->pages_touched); > + > entries += ret; > entry_bytes += local_read(&head_page->page->commit); > local_set(&cpu_buffer->head_page->entries, ret); > -- > 2.47.2 >
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c index 0419d41a2060..bb6089c2951e 100644 --- a/kernel/trace/ring_buffer.c +++ b/kernel/trace/ring_buffer.c @@ -1850,6 +1850,11 @@ static void rb_meta_validate_events(struct ring_buffer_per_cpu *cpu_buffer) cpu_buffer->cpu); goto invalid; } + + /* If the buffer has content, update pages_touched */ + if (ret) + local_inc(&cpu_buffer->pages_touched); + entries += ret; entry_bytes += local_read(&head_page->page->commit); local_set(&cpu_buffer->head_page->entries, ret);