tracing: Wake up waiters when tracing is disabled

When tracing is disabled, there's no reason that waiters should stay
waiting, wake them up, otherwise tasks get stuck when they should be
flushing the buffers.

Cc: stable@vger.kernel.org
Fixes: e30f53aad2 ("tracing: Do not busy wait in buffer splice")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
This commit is contained in:
Steven Rostedt (Google) 2022-09-28 18:22:20 -04:00
parent 01b2a52171
commit 2b0fd9a59b
1 changed files with 6 additions and 0 deletions

View File

@ -8334,6 +8334,10 @@ tracing_buffers_splice_read(struct file *file, loff_t *ppos,
if (ret) if (ret)
goto out; goto out;
/* No need to wait after waking up when tracing is off */
if (!tracer_tracing_is_on(iter->tr))
goto out;
/* Make sure we see the new wait_index */ /* Make sure we see the new wait_index */
smp_rmb(); smp_rmb();
if (wait_index != iter->wait_index) if (wait_index != iter->wait_index)
@ -9065,6 +9069,8 @@ rb_simple_write(struct file *filp, const char __user *ubuf,
tracer_tracing_off(tr); tracer_tracing_off(tr);
if (tr->current_trace->stop) if (tr->current_trace->stop)
tr->current_trace->stop(tr); tr->current_trace->stop(tr);
/* Wake up any waiters */
ring_buffer_wake_waiters(buffer, RING_BUFFER_ALL_CPUS);
} }
mutex_unlock(&trace_types_lock); mutex_unlock(&trace_types_lock);
} }