mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
ring-buffer: Stop remote reader update when page swap fails
The remote swap_reader_page callback can return -EBUSY when the writer
moves the head before the remote catches it, particularly during an event
storm on a small buffer. __rb_get_reader_page_from_remote() currently
warns about that failure but continues with the unchanged reader ID and
rearranges the local page list as though the swap succeeded.
Handle the callback failure as a recoverable error. Report it with
pr_warn_ratelimited() and return NULL. Callers already handle a NULL reader
page as a failed attempt. This avoids splicing the same page as both the
previous and new reader without flooding the log under contention.
Cc: stable@vger.kernel.org
Fixes: 2e67fabd8b ("ring-buffer: Introduce ring-buffer remotes")
Link: https://patch.msgid.link/20260825-kernel-patch-1-v2-2-bb3461807a32@gmail.com
Assisted-by: LLM sparse
Signed-off-by: Ivan Immanuel Shaji <ivanimmanuel1234@gmail.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
e0d3aed7b1
commit
5eab74874d
|
|
@ -5805,8 +5805,11 @@ __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 (cpu_buffer->remote->swap_reader_page(cpu_buffer->cpu,
|
||||
cpu_buffer->remote->priv)) {
|
||||
pr_warn_ratelimited("Remote reader page swap failed\n");
|
||||
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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user