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



Reply via email to