mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
ring-buffer: Make sure the spare sub buffer used for reads has same size
Now that the ring buffer specifies the size of its sub buffers, they all need to be the same size. When doing a read, a swap is done with a spare page. Make sure they are the same size before doing the swap, otherwise the read will fail. Link: https://lore.kernel.org/linux-trace-kernel/20231219185629.763664788@goodmis.org Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Tzvetomir Stoyanov <tz.stoyanov@gmail.com> Cc: Vincent Donnefort <vdonnefort@google.com> Cc: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
parent
b81e03a249
commit
4e958db34f
@ -7582,6 +7582,7 @@ struct ftrace_buffer_info {
|
||||
struct trace_iterator iter;
|
||||
void *spare;
|
||||
unsigned int spare_cpu;
|
||||
unsigned int spare_size;
|
||||
unsigned int read;
|
||||
};
|
||||
|
||||
@ -8301,6 +8302,15 @@ tracing_buffers_read(struct file *filp, char __user *ubuf,
|
||||
|
||||
page_size = ring_buffer_subbuf_size_get(iter->array_buffer->buffer);
|
||||
|
||||
/* Make sure the spare matches the current sub buffer size */
|
||||
if (info->spare) {
|
||||
if (page_size != info->spare_size) {
|
||||
ring_buffer_free_read_page(iter->array_buffer->buffer,
|
||||
info->spare_cpu, info->spare);
|
||||
info->spare = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (!info->spare) {
|
||||
info->spare = ring_buffer_alloc_read_page(iter->array_buffer->buffer,
|
||||
iter->cpu_file);
|
||||
@ -8309,6 +8319,7 @@ tracing_buffers_read(struct file *filp, char __user *ubuf,
|
||||
info->spare = NULL;
|
||||
} else {
|
||||
info->spare_cpu = iter->cpu_file;
|
||||
info->spare_size = page_size;
|
||||
}
|
||||
}
|
||||
if (!info->spare)
|
||||
|
Loading…
Reference in New Issue
Block a user