linux/kernel/trace
Steven Rostedt (Red Hat) 78a3db11cb ring-buffer: Fix infinite spin in reading buffer
commit 24607f114f upstream.

Commit 651e22f270 "ring-buffer: Always reset iterator to reader page"
fixed one bug but in the process caused another one. The reset is to
update the header page, but that fix also changed the way the cached
reads were updated. The cache reads are used to test if an iterator
needs to be updated or not.

A ring buffer iterator, when created, disables writes to the ring buffer
but does not stop other readers or consuming reads from happening.
Although all readers are synchronized via a lock, they are only
synchronized when in the ring buffer functions. Those functions may
be called by any number of readers. The iterator continues down when
its not interrupted by a consuming reader. If a consuming read
occurs, the iterator starts from the beginning of the buffer.

The way the iterator sees that a consuming read has happened since
its last read is by checking the reader "cache". The cache holds the
last counts of the read and the reader page itself.

Commit 651e22f270 changed what was saved by the cache_read when
the rb_iter_reset() occurred, making the iterator never match the cache.
Then if the iterator calls rb_iter_reset(), it will go into an
infinite loop by checking if the cache doesn't match, doing the reset
and retrying, just to see that the cache still doesn't match! Which
should never happen as the reset is suppose to set the cache to the
current value and there's locks that keep a consuming reader from
having access to the data.

Fixes: 651e22f270 "ring-buffer: Always reset iterator to reader page"
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-10-09 12:18:42 -07:00
..
blktrace.c blktrace: fix accounting of partially completed requests 2014-05-30 21:52:11 -07:00
ftrace.c tracing: Fix graph tracer with stack tracer on other archs 2014-07-28 08:00:03 -07:00
Kconfig ring-buffer: Select IRQ_WORK 2013-05-03 19:24:17 -04:00
Makefile
power-traces.c PM / tracing: remove deprecated power trace API 2013-01-26 00:39:12 +01:00
ring_buffer_benchmark.c
ring_buffer.c ring-buffer: Fix infinite spin in reading buffer 2014-10-09 12:18:42 -07:00
rpm-traces.c
trace_branch.c tracing: Fix the branch tracer that broke with buffer change 2013-03-15 00:35:54 -04:00
trace_clock.c tracing: Fix wraparound problems in "uptime" trace clock 2014-07-31 12:53:49 -07:00
trace_entries.h tracing: Add trace_puts() for even faster trace_printk() tracing 2013-03-15 00:35:55 -04:00
trace_event_perf.c perf/ftrace: Fix paranoid level for enabling function tracer 2013-11-29 11:11:43 -08:00
trace_events_filter_test.h
trace_events_filter.c tracing: Change event_filter_read/write to verify i_private != NULL 2013-08-29 09:47:33 -07:00
trace_events.c tracing: Fix array size mismatch in format string 2014-03-31 09:58:12 -07:00
trace_export.c tracing: Fix array size mismatch in format string 2014-03-31 09:58:12 -07:00
trace_functions_graph.c tracing: Consolidate max_tr into main trace_array structure 2013-03-15 00:35:40 -04:00
trace_functions.c tracing: Add function probe to trigger stack traces 2013-03-15 00:36:05 -04:00
trace_irqsoff.c tracing: Use flag buffer_disabled for irqsoff tracer 2013-08-14 22:59:07 -07:00
trace_kdb.c tracing: Consolidate max_tr into main trace_array structure 2013-03-15 00:35:40 -04:00
trace_kprobe.c tracing/kprobes: Fail to unregister if probe event files are in use 2013-08-29 09:47:34 -07:00
trace_mmiotrace.c tracing: Consolidate max_tr into main trace_array structure 2013-03-15 00:35:40 -04:00
trace_nop.c
trace_output.c Tracing updates for Linux 3.10 2013-04-29 13:55:38 -07:00
trace_output.h tracing: Rename trace_event_mutex to trace_event_sem 2013-03-15 13:22:10 -04:00
trace_printk.c
trace_probe.c
trace_probe.h uprobes/tracing: Introduce is_trace_uprobe_enabled() 2013-02-08 18:24:30 +01:00
trace_sched_switch.c tracing: Consolidate max_tr into main trace_array structure 2013-03-15 00:35:40 -04:00
trace_sched_wakeup.c tracing: Add function-trace option to disable function tracing of latency tracers 2013-03-15 00:36:08 -04:00
trace_selftest_dynamic.c
trace_selftest.c tracing: Fix bad parameter passed in branch selftest 2013-05-29 16:00:03 -04:00
trace_stack.c Tracing updates for Linux 3.10 2013-04-29 13:55:38 -07:00
trace_stat.c tracing: Check return value of tracing_init_dentry() 2013-04-12 23:02:32 -04:00
trace_stat.h
trace_syscalls.c tracing: Fix irqs-off tag display in syscall tracing 2013-07-25 14:07:43 -07:00
trace_uprobe.c tracing/uprobes: Fail to unregister if probe event files are in use 2013-08-29 09:47:34 -07:00
trace.c tracing: Fix wraparound problems in "uptime" trace clock 2014-07-31 12:53:49 -07:00
trace.h ring-buffer: Check if buffer exists before polling 2014-07-17 15:58:03 -07:00