aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-01-14 23:22:16 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-01-14 23:22:16 -0500
commit406089d01562f1e2bf9f089fd7637009ebaad589 (patch)
tree1b8202a1b91354eb8abb7b35eef2cee02ef92a75
parent7dea1ff3b7b48356c02cb00d6a4e8d5aaf680830 (diff)
parent250bfd3d8e7e19cb649dd94689f0af2ce3474060 (diff)
Merge tag 'trace-3.8-rc3-regression-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace
Pull tracing regression fixes from Steven Rostedt: "The clean up patch commit 0fb9656d957d "tracing: Make tracing_enabled be equal to tracing_on" caused two regressions. 1) The irqs off latency tracer no longer starts if tracing_on is off when the tracer is set, and then tracing_on is enabled. The tracing_on file needs the hook that tracing_enabled had to enable tracers if they request it (call the tracer's start() method). 2) That commit had a separate change that really should have been a separate patch, but it must have been added accidently with the -a option of git commit. But as the change is still related to the commit it wasn't noticed in review. That change, changed the way blocking is done by the trace_pipe file with respect to the tracing_on settings. I've been told that this change breaks current userspace, and this specific change is being reverted." * tag 'trace-3.8-rc3-regression-fix' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: tracing: Fix regression of trace_pipe tracing: Fix regression with irqsoff tracer and tracing_on file
-rw-r--r--kernel/trace/trace.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 1bbfa044650..3c13e46d7d2 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3454,7 +3454,7 @@ static int tracing_wait_pipe(struct file *filp)
3454 return -EINTR; 3454 return -EINTR;
3455 3455
3456 /* 3456 /*
3457 * We block until we read something and tracing is enabled. 3457 * We block until we read something and tracing is disabled.
3458 * We still block if tracing is disabled, but we have never 3458 * We still block if tracing is disabled, but we have never
3459 * read anything. This allows a user to cat this file, and 3459 * read anything. This allows a user to cat this file, and
3460 * then enable tracing. But after we have read something, 3460 * then enable tracing. But after we have read something,
@@ -3462,7 +3462,7 @@ static int tracing_wait_pipe(struct file *filp)
3462 * 3462 *
3463 * iter->pos will be 0 if we haven't read anything. 3463 * iter->pos will be 0 if we haven't read anything.
3464 */ 3464 */
3465 if (tracing_is_enabled() && iter->pos) 3465 if (!tracing_is_enabled() && iter->pos)
3466 break; 3466 break;
3467 } 3467 }
3468 3468
@@ -4817,10 +4817,17 @@ rb_simple_write(struct file *filp, const char __user *ubuf,
4817 return ret; 4817 return ret;
4818 4818
4819 if (buffer) { 4819 if (buffer) {
4820 if (val) 4820 mutex_lock(&trace_types_lock);
4821 if (val) {
4821 ring_buffer_record_on(buffer); 4822 ring_buffer_record_on(buffer);
4822 else 4823 if (current_trace->start)
4824 current_trace->start(tr);
4825 } else {
4823 ring_buffer_record_off(buffer); 4826 ring_buffer_record_off(buffer);
4827 if (current_trace->stop)
4828 current_trace->stop(tr);
4829 }
4830 mutex_unlock(&trace_types_lock);
4824 } 4831 }
4825 4832
4826 (*ppos)++; 4833 (*ppos)++;