[PATCH 2/2] ring-buffer: Stop remote reader update when page swap fails
Ivan Immanuel Shaji via B4 Relay <[email protected]>
| Newsgroups | org.kernel.vger.stable,org.kernel.feeds.b4-sent,org.kernel.vger.linux-kernel,org.kernel.vger.linux-trace-kernel |
|---|---|
| Message-ID | <[email protected]> |
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