]> git.baikalelectronics.ru Git - kernel.git/commit
tracing/ring-buffer: Have polling block on watermark
authorSteven Rostedt (Google) <rostedt@goodmis.org>
Fri, 21 Oct 2022 03:14:27 +0000 (23:14 -0400)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Wed, 16 Nov 2022 22:13:04 +0000 (17:13 -0500)
commit91cd29d9297dab1f8daee5d30a1b0aa35ad5e8f6
treee7c1971a6cbe1422993587469f41963312501fab
parenta4006cca2ec79a9fea74149004ac62dd348ae059
tracing/ring-buffer: Have polling block on watermark

Currently the way polling works on the ring buffer is broken. It will
return immediately if there's any data in the ring buffer whereas a read
will block until the watermark (defined by the tracefs buffer_percent file)
is hit.

That is, a select() or poll() will return as if there's data available,
but then the following read will block. This is broken for the way
select()s and poll()s are supposed to work.

Have the polling on the ring buffer also block the same way reads and
splice does on the ring buffer.

Link: https://lkml.kernel.org/r/20221020231427.41be3f26@gandalf.local.home
Cc: Linux Trace Kernel <linux-trace-kernel@vger.kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Cc: Primiano Tucci <primiano@google.com>
Cc: stable@vger.kernel.org
Fixes: 8f6b5e536b960 ("ring-buffer: Do not wake up a splice waiter when page is not full")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
include/linux/ring_buffer.h
kernel/trace/ring_buffer.c
kernel/trace/trace.c