Re: [PATCH 3/4] ring-buffer: Drop redundant ring_buffer_iter::event_size
From: Steven Rostedt
Date: Wed Nov 04 2026 - 14:07:43 EST
On Tue, 22 Sep 2026 08:29:43 +0100
Vincent Donnefort <vdonnefort@xxxxxxxxxx> wrote:
> event_size contains the maximum size the iterator can read for each
> event. It corresponds to the maximum capacity of a ring-buffer page.
> During non-consuming read, resizing is disabled. It is therefore safe to
> just use rb_subbuf_capacity(), making event_size redundant. Remove it.
Hmm, I don't like the code dependency here. Yes, we disable resizing and
the event_size isn't going to change, but if in the future that is no
longer the case, then this becomes a hidden bug.
What's wrong with just having a field that keeps track of the size
allocated? It's more robust that way and doesn't have any hidden
dependencies.
-- Steve
>
> Signed-off-by: Vincent Donnefort <vdonnefort@xxxxxxxxxx>
> ---
> kernel/trace/ring_buffer.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
> index 1a158a24b3c8..3129589e2d0e 100644
> --- a/kernel/trace/ring_buffer.c
> +++ b/kernel/trace/ring_buffer.c
> @@ -680,7 +680,6 @@ struct ring_buffer_iter {
> u64 read_stamp;
> u64 page_stamp;
> struct ring_buffer_event *event;
> - size_t event_size;
> int missed_events;
> };
>
> @@ -3558,9 +3557,11 @@ rb_iter_head_event(struct ring_buffer_iter *iter)
> */
> barrier();
>
> - if ((iter->head + length) > commit || length > iter->event_size)
> + if ((iter->head + length) > commit ||
> + length > rb_subbuf_capacity(iter->cpu_buffer->buffer)) {
> /* Writer corrupted the read? */
> goto reset;
> + }
>
> memcpy(iter->event, event, length);
> /*
> @@ -6488,8 +6489,7 @@ ring_buffer_read_start(struct trace_buffer *buffer, int cpu, gfp_t flags)
> mutex_unlock(&buffer->mutex);
>
> /* Holds the entire event: data and meta data. */
> - iter->event_size = rb_page_capacity(READ_ONCE(cpu_buffer->reader_page));
> - iter->event = kmalloc(iter->event_size, flags);
> + iter->event = kmalloc(rb_subbuf_capacity(buffer), flags);
> if (!iter->event) {
> atomic_dec(&cpu_buffer->resize_disabled);
> return NULL;