• Steven Rostedt (Google)'s avatar
    tracing/ring-buffer: Have polling block on watermark · 42fb0a1e
    Steven Rostedt (Google) authored
    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: 1e0d6714 ("ring-buffer: Do not wake up a splice waiter when page is not full")
    Signed-off-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
    42fb0a1e
ring_buffer.c 164 KB