|
@@ -3454,7 +3454,7 @@ static int tracing_wait_pipe(struct file *filp)
|
|
|
return -EINTR;
|
|
|
|
|
|
/*
|
|
|
- * We block until we read something and tracing is enabled.
|
|
|
+ * We block until we read something and tracing is disabled.
|
|
|
* We still block if tracing is disabled, but we have never
|
|
|
* read anything. This allows a user to cat this file, and
|
|
|
* then enable tracing. But after we have read something,
|
|
@@ -3462,7 +3462,7 @@ static int tracing_wait_pipe(struct file *filp)
|
|
|
*
|
|
|
* iter->pos will be 0 if we haven't read anything.
|
|
|
*/
|
|
|
- if (tracing_is_enabled() && iter->pos)
|
|
|
+ if (!tracing_is_enabled() && iter->pos)
|
|
|
break;
|
|
|
}
|
|
|
|
|
@@ -4817,10 +4817,17 @@ rb_simple_write(struct file *filp, const char __user *ubuf,
|
|
|
return ret;
|
|
|
|
|
|
if (buffer) {
|
|
|
- if (val)
|
|
|
+ mutex_lock(&trace_types_lock);
|
|
|
+ if (val) {
|
|
|
ring_buffer_record_on(buffer);
|
|
|
- else
|
|
|
+ if (current_trace->start)
|
|
|
+ current_trace->start(tr);
|
|
|
+ } else {
|
|
|
ring_buffer_record_off(buffer);
|
|
|
+ if (current_trace->stop)
|
|
|
+ current_trace->stop(tr);
|
|
|
+ }
|
|
|
+ mutex_unlock(&trace_types_lock);
|
|
|
}
|
|
|
|
|
|
(*ppos)++;
|