Steven Rostedt (Red Hat)
24607f114f
ring-buffer: Fix infinite spin in reading buffer
...
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>
2014-10-02 16:51:18 -04:00
..
bpf
net: filter: split 'struct sk_filter' into socket and bpf parts
2014-08-02 15:03:58 -07:00
debug
kdb: Use ktime_get_ts()
2014-06-12 16:18:45 +02:00
events
perf: Fix a race condition in perf_remove_from_context()
2014-09-09 06:53:42 +02:00
gcov
kernel/gcov/fs.c: remove unnecessary null test before debugfs_remove
2014-08-08 15:57:24 -07:00
irq
irq: Export handle_fasteoi_irq
2014-08-25 21:13:30 +02:00
locking
arch, locking: Ciao arch_mutex_cpu_relax()
2014-07-17 12:32:47 +02:00
power
Revert "PM / Hibernate: Iterate over set bits instead of PFNs in swsusp_free()"
2014-09-25 00:59:54 +02:00
printk
kernel/printk/printk.c: fix faulty logic in the case of recursive printk
2014-09-10 15:42:12 -07:00
rcu
rcu: Make nocb leader kthreads process pending callbacks after spawning
2014-08-28 05:59:59 -07:00
sched
Merge branches 'pm-sleep', 'pm-cpufreq' and 'pm-cpuidle'
2014-08-11 23:19:48 +02:00
time
alarmtimer: Lock k_itimer during timer callback
2014-09-12 13:59:12 -07:00
trace
ring-buffer: Fix infinite spin in reading buffer
2014-10-02 16:51:18 -04:00
.gitignore
acct.c
kernel/acct.c: fix coding style warnings and errors
2014-08-08 15:57:27 -07:00
async.c
audit.c
CAPABILITIES: remove undefined caps from all processes
2014-07-24 21:53:47 +10:00
audit.h
audit_tree.c
audit_watch.c
auditfilter.c
kernel/auditfilter.c: replace count*size kmalloc by kcalloc
2014-08-06 18:01:12 -07:00
auditsc.c
auditsc: audit_krule mask accesses need bounds checking
2014-06-10 08:44:40 -07:00
backtracetest.c
bounds.c
page-cgroup: get rid of NR_PCG_FLAGS
2014-08-08 15:57:18 -07:00
capability.c
CAPABILITIES: remove undefined caps from all processes
2014-07-24 21:53:47 +10:00
cgroup.c
cgroup: fix unbalanced locking
2014-09-18 12:32:52 -04:00
cgroup_freezer.c
cgroup: rename cgroup_subsys->base_cftypes to ->legacy_cftypes
2014-07-15 11:05:09 -04:00
compat.c
compat: nanosleep: Clarify error handling
2014-09-06 12:58:18 +02:00
configs.c
context_tracking.c
x86/kprobes: Fix build errors and blacklist context_track_user
2014-06-14 09:07:44 +02:00
cpu.c
sched: Rework check_for_tasks()
2014-07-05 11:17:45 +02:00
cpu_pm.c
cpuset.c
cpuset: PF_SPREAD_PAGE and PF_SPREAD_SLAB should be atomic flags
2014-09-24 22:16:06 -04:00
crash_dump.c
cred.c
delayacct.c
delayacct: Remove braindamaged type conversions
2014-07-23 10:18:06 -07:00
dma.c
elfcore.c
exec_domain.c
exit.c
kernel/exit.c: fix coding style warnings and errors
2014-08-08 15:57:22 -07:00
extable.c
fork.c
seccomp: Replace BUG(!spin_is_locked()) with assert_spin_lock
2014-08-11 13:29:12 -07:00
freezer.c
futex.c
futex: Unlock hb->lock in futex_wait_requeue_pi() error path
2014-09-12 22:04:36 +02:00
futex_compat.c
groups.c
hung_task.c
kernel/hung_task.c: convert simple_strtoul to kstrtouint
2014-06-04 16:54:15 -07:00
irq_work.c
irq_work: Remove BUG_ON in irq_work_run()
2014-07-05 11:17:26 +02:00
jump_label.c
kallsyms.c
kernel/kallsyms.c: fix %pB when there's no symbol at the address
2014-08-08 15:57:18 -07:00
kcmp.c
kcmp: fix standard comparison bug
2014-09-10 15:42:12 -07:00
Kconfig.freezer
Kconfig.hz
Kconfig.locks
locking/rwsem: Add CONFIG_RWSEM_SPIN_ON_OWNER
2014-07-16 14:57:13 +02:00
Kconfig.preempt
kexec.c
kexec: create a new config option CONFIG_KEXEC_FILE for new syscall
2014-08-29 16:28:16 -07:00
kmod.c
signals: change wait_for_helper() to use kernel_sigaction()
2014-06-06 16:08:12 -07:00
kprobes.c
kprobes: Skip kretprobe hit in NMI context to avoid deadlock
2014-08-08 10:38:04 +02:00
ksysfs.c
kthread.c
kthread_work: wake up worker only when the worker is idle
2014-07-28 14:07:52 -04:00
latencytop.c
Makefile
bin2c: move bin2c in scripts/basic
2014-08-08 15:57:32 -07:00
module-internal.h
module.c
module: Clean up ro/nx after early module load failures
2014-08-16 04:47:00 +09:30
module_signing.c
notifier.c
nsproxy.c
namespaces: Use task_lock and not rcu to protect nsproxy
2014-07-29 18:08:50 -07:00
padata.c
panic.c
panic: add TAINT_SOFTLOCKUP
2014-08-08 15:57:24 -07:00
params.c
Add module param type 'ullong'
2014-07-17 22:07:37 +02:00
pid.c
pid_namespace.c
profile.c
kernel/profile.c: use static const char instead of static char
2014-06-06 16:08:13 -07:00
ptrace.c
sched: Remove proliferation of wait_on_bit() action functions
2014-07-16 15:10:39 +02:00
range.c
reboot.c
relay.c
res_counter.c
resource.c
resource: fix the case of null pointer access
2014-08-29 16:28:15 -07:00
seccomp.c
seccomp: Replace BUG(!spin_is_locked()) with assert_spin_lock
2014-08-11 13:29:12 -07:00
signal.c
Merge branch 'signal-cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/misc
2014-08-09 09:58:12 -07:00
smp.c
kernel/smp.c:on_each_cpu_cond(): fix warning in fallback path
2014-08-06 18:01:22 -07:00
smpboot.c
smpboot.h
softirq.c
stacktrace.c
stop_machine.c
sys.c
sched: move no_new_privs into new atomic flags
2014-07-18 12:13:38 -07:00
sys_ni.c
kexec: new syscall kexec_file_load() declaration
2014-08-08 15:57:32 -07:00
sysctl.c
mm, hugetlb: remove hugetlb_zero and hugetlb_infinity
2014-08-06 18:01:19 -07:00
sysctl_binary.c
ipv6: Allow accepting RA from local IP addresses.
2014-07-01 12:16:24 -07:00
system_certificates.S
system_keyring.c
KEYS: validate certificate trust only with builtin keys
2014-07-17 09:35:17 -04:00
task_work.c
taskstats.c
test_kprobes.c
kernel/test_kprobes.c: use current logging functions
2014-08-08 15:57:18 -07:00
torture.c
torture: Avoid format string leak to thead name
2014-07-07 10:12:56 -07:00
tracepoint.c
tracing: syscall_regfunc() should not skip kernel threads
2014-06-21 00:15:26 -04:00
tsacct.c
sched: Make task->start_time nanoseconds based
2014-07-23 10:18:05 -07:00
uid16.c
up.c
user-return-notifier.c
user.c
kernel/user.c: drop unused field 'files' from user_struct
2014-06-04 16:54:16 -07:00
user_namespace.c
proc: constify seq_operations
2014-08-08 15:57:22 -07:00
utsname.c
namespaces: Use task_lock and not rcu to protect nsproxy
2014-07-29 18:08:50 -07:00
utsname_sysctl.c
sysctl: convert use of typedef ctl_table to struct ctl_table
2014-06-06 16:08:16 -07:00
watchdog.c
panic: add TAINT_SOFTLOCKUP
2014-08-08 15:57:24 -07:00
workqueue.c
Merge branch 'for-3.17' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/percpu
2014-08-04 10:09:27 -07:00
workqueue_internal.h