Re: [PATCH 2/2] ring-buffer: Stop remote reader update when page swap fails
Vincent Donnefort <[email protected]>
| Newsgroups | org.kernel.vger.stable,org.kernel.vger.linux-kernel,org.kernel.vger.linux-trace-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Aug 25, 2026 at 01:20:38AM -0400, Ivan Immanuel Shaji via B4 Relay wrote: > From: Ivan Immanuel Shaji <[email protected]> > > The remote swap_reader_page callback can fail when the writer moves the > head before the remote catches it. __rb_get_reader_page_from_remote() > warns about that failure but continues with the unchanged reader ID and > rearranges the local page list as though the swap succeeded. > > Stop immediately after warning. Callers already handle a NULL reader > page as a failed attempt, and this avoids splicing the same page as both > the previous and new reader. > > Fixes: 2e67fabd8b77 ("ring-buffer: Introduce ring-buffer remotes") > Cc: [email protected] > Assisted-by: LLM sparse > Signed-off-by: Ivan Immanuel Shaji <[email protected]> > --- > kernel/trace/ring_buffer.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c > index 3c3ed639923d..d11b2759caac 100644 > --- a/kernel/trace/ring_buffer.c > +++ b/kernel/trace/ring_buffer.c > @@ -5805,8 +5805,9 @@ __rb_get_reader_page_from_remote(struct ring_buffer_per_cpu *cpu_buffer) > > prev_reader = cpu_buffer->subbuf_ids[cpu_buffer->meta_page->reader.id]; > > - WARN_ON_ONCE(cpu_buffer->remote->swap_reader_page(cpu_buffer->cpu, > - cpu_buffer->remote->priv)); > + if (WARN_ON_ONCE(cpu_buffer->remote->swap_reader_page(cpu_buffer->cpu, > + cpu_buffer->remote->priv))) > + return NULL; > /* nr_pages doesn't include the reader page */ > if (WARN_ON_ONCE(cpu_buffer->meta_page->reader.id > cpu_buffer->nr_pages)) > return NULL; > > -- > 2.53.0 > > If handled gracefully and as this can be triggered by a storm of events on small buffer (when -EBUSY) I wonder if we shouldn't use a pr_warn_ratelimited() instead of a WARN()? -- Vincent