ring-buffer: Update pages_touched to reflect persistent buffer content
commit97937834aeupstream. The pages_touched field represents the number of subbuffers in the ring buffer that have content that can be read. This is used in accounting of "dirty_pages" and "buffer_percent" to allow the user to wait for the buffer to be filled to a certain amount before it reads the buffer in blocking mode. The persistent buffer never updated this value so it was set to zero, and this accounting would take it as it had no content. This would cause user space to wait for content even though there's enough content in the ring buffer that satisfies the buffer_percent. Cc: stable@vger.kernel.org Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Vincent Donnefort <vdonnefort@google.com> Link: https://lore.kernel.org/20250214123512.0631436e@gandalf.local.home Fixes:5f3b6e839f("ring-buffer: Validate boot range memory events") Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3ec743d558
commit
9f837ea922
@@ -1850,6 +1850,11 @@ static void rb_meta_validate_events(struct ring_buffer_per_cpu *cpu_buffer)
|
||||
cpu_buffer->cpu);
|
||||
goto invalid;
|
||||
}
|
||||
|
||||
/* If the buffer has content, update pages_touched */
|
||||
if (ret)
|
||||
local_inc(&cpu_buffer->pages_touched);
|
||||
|
||||
entries += ret;
|
||||
entry_bytes += local_read(&head_page->page->commit);
|
||||
local_set(&cpu_buffer->head_page->entries, ret);
|
||||
|
||||
Reference in New Issue
Block a user