Re: [PATCH 1/6] ring-buffer: Prevent resizing of persistent ring buffer

Vincent Donnefort <[email protected]>
Newsgroups gmane.linux.kernel
Message-ID <[email protected]>
On Fri, Aug 07, 2026 at 10:43:12AM +0100, Vincent Donnefort wrote:
> On Fri, Aug 07, 2026 at 09:14:26AM +0100, Vincent Donnefort wrote:
> > On Fri, Aug 07, 2026 at 11:18:08AM +0900, Masami Hiramatsu wrote:
> > > On Thu,  6 Aug 2026 22:13:01 +0100
> > > Vincent Donnefort <[email protected]> wrote:
> > > 
> > > > Dynamically resizing a persistent ring buffer is not possible. Disable
> > > > the feature.
> > > 
> > > Is it true? Of course there is meaningless to resize the persistent
> > > ring buffer (because it makes the buffer none-persistent), we are currently
> > > allows user to resize it (like for resizing unused persistent ring buffer)
> > 
> > __rb_allocate_pages() in ring_buffer_resize() would call for a persistent buffer
> > rb_range_buffer(), which IIUC, is just reusing the same ring buffer pages as the
> > one already in the persistent buffer.

With more logs, during a resize form 8 to 16K: 

cpu_buffer->new_pages contains:

[  632.919017] ring_buffer_resize: CPU 0 NEW page 00000000768ccc81
[  632.919828] ring_buffer_resize: CPU 0 NEW page 00000000ee48729c

while cpu_buffer->pages contains:

[  632.921511] ring_buffer_resize: CPU 0 OLD page 000000002c4c6f92
[  632.921917] ring_buffer_resize: CPU 0 OLD page 00000000dadcb510
[  632.922295] ring_buffer_resize: CPU 0 OLD page 00000000768ccc81
[  632.923226] ring_buffer_resize: CPU 0 OLD reader page 000000003b4dd5ba

So two buffer_page point to 00000000768ccc81.

-- 
Vincent

> 
> I have just tried and if reducing the size works, increasing fails in both
> rb_set_head_page() and rb_insert_pages() with a warning, which I believe is
> expected.
> 
> We could improve that, but it feels like it is a lot of work for a meaningless
> feature which we should just disable?
> 
> -- 
> Vincent
> 
> > 
> > So, reducing the size would surely work, however increasing it, would most
> > likely mean having buffer_page pointing to the same buffer_data_page?
> > 
> > Also, the comment
> > 
> >   /* 
> >    * Range mapped buffers have the same restrictions as memory
> >    * mapped ones do.
> >    */
> > 
> > Made me think that resize_disabled was omitted.
> > 
> > > 
> > > Thank you,
> > > 
> > > > 
> > > > Fixes: be68d63a139b ("ring-buffer: Add ring_buffer_alloc_range()")
> > > > Signed-off-by: Vincent Donnefort <[email protected]>
> > > > 
> > > > diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
> > > > index 8e2485bb3aa8..afe75ad2bbf2 100644
> > > > --- a/kernel/trace/ring_buffer.c
> > > > +++ b/kernel/trace/ring_buffer.c
> > > > @@ -2528,6 +2528,8 @@ rb_allocate_cpu_buffer(struct trace_buffer *buffer, long nr_pages, int cpu)
> > > >  		if (cpu_buffer->ring_meta->head_buffer)
> > > >  			rb_meta_buffer_update(cpu_buffer, bpage);
> > > >  		bpage->range = 1;
> > > > +
> > > > +		atomic_inc(&cpu_buffer->resize_disabled);
> > > >  	} else if (buffer->remote) {
> > > >  		struct ring_buffer_desc *desc = ring_buffer_desc(buffer->remote->desc, cpu);
> > > >  
> > > > -- 
> > > > 2.55.0.654.g21b8a5bc05-goog
> > > > 
> > > 
> > > 
> > > -- 
> > > Masami Hiramatsu (Google) <[email protected]>
> > 
> > -- 
> > Vincent
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.