ring-buffer: Fixes for v6.12
- Fix ref counter of buffers assigned at boot up
A tracing instance can be created from the kernel command line.
If it maps to memory, it is considered permanent and should not
be deleted, or bad things can happen. If it is not mapped to memory,
then the user is fine to delete it via rmdir from the instances
directory. But the ref counts assumed 0 was free to remove and
greater than zero was not. But this was not the case. When an
instance is created, it should have the reference of 1, and if
it should not be removed, it must be greater than 1. The boot up
code set normal instances with a ref count of 0, which could get
removed if something accessed it and then released it. And memory
mapped instances had a ref count of 1 which meant it could be deleted,
and bad things happen. Keep normal instances ref count as 1, and
set memory mapped instances ref count to 2.
- Protect sub buffer size (order) updates from other modifications
When a ring buffer is changing the size of its sub-buffers, no other
operations should be performed on the ring buffer. That includes
reading it. But the locking only grabbed the buffer->mutex that
keeps some operations from touching the ring buffer. It also must
hold the cpu_buffer->reader_lock as well when updates happen as
other paths use that to do some operations on the ring buffer.
git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
ring-buffer/urgent
Head SHA1: 09661f75e75cb6c1d2d8326a70c311d46729235f
Petr Pavlu (1):
ring-buffer: Fix reader locking when changing the sub buffer order
Steven Rostedt (1):
ring-buffer: Fix refcount setting of boot mapped buffers
----
kernel/trace/ring_buffer.c | 44 ++++++++++++++++++++++++++------------------
kernel/trace/trace.c | 6 +++---
2 files changed, 29 insertions(+), 21 deletions(-)