summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Donnefort <vdonnefort@google.com>2026-09-01 16:54:42 +0100
committerSteven Rostedt <rostedt@goodmis.org>2026-09-03 10:40:16 -0400
commit6365c44a824ff138e7926413932bb5c2e28a4c8c (patch)
treebd6ba11eb25701f5032d7159f830853572bb4ed8
parentf2951ebd15c36a1ea4820a7f0cbb0b5f1c028b73 (diff)
downloadlinux-stable-6365c44a824ff138e7926413932bb5c2e28a4c8c.tar.gz
linux-stable-6365c44a824ff138e7926413932bb5c2e28a4c8c.zip
ring-buffer: Allow splice reads on static buffers
ring_buffer_read_page() rejects splice (full=1) reads on static buffers (that is user-mapped, persistent or remote) because !read check assumes unread pages must be swapped. However for those buffers we have no other choice than memcpy the data. For the memcpy case, only return an error when the writer is still on the reader page for the splice interface to wait. Cc: stable@vger.kernel.org Link: https://patch.msgid.link/20260901155445.1475405-2-vdonnefort@google.com Fixes: 117c39200d9d ("ring-buffer: Introducing ring-buffer mapping functions") Signed-off-by: Vincent Donnefort <vdonnefort@google.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--kernel/trace/ring_buffer.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
index b0963ac6f..84fd4cdd4 100644
--- a/kernel/trace/ring_buffer.c
+++ b/kernel/trace/ring_buffer.c
@@ -7193,15 +7193,8 @@ int ring_buffer_read_page(struct trace_buffer *buffer,
unsigned int event_size;
unsigned int flags = 0;
- /*
- * If a full page is expected, this can still be returned
- * if there's been a previous partial read and the
- * rest of the page can be read and the commit page is off
- * the reader page.
- */
- if (full &&
- (!read || (len < (size - read)) ||
- cpu_buffer->reader_page == cpu_buffer->commit_page))
+ /* If a full page is requested, it cannot be the commit page */
+ if (full && cpu_buffer->reader_page == cpu_buffer->commit_page)
return -1;
if (len > (size - read))