]> 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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 8 Dec 2022 10:23:05 +0000 (11:23 +0100)
commit37637ff938bd3cc7e640604eb26c6f78727739fd
treeacbf9f0bcc9bf761ca43654136a1c59349ebd85e
parentc869b1befc14d1e707fcceb0ad91657d560f7bd9
tracing/ring-buffer: Have polling block on watermark

commit 91cd29d9297dab1f8daee5d30a1b0aa35ad5e8f6 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/linux/ring_buffer.h
kernel/trace/ring_buffer.c
kernel/trace/trace.c