aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt (Google) <rostedt@goodmis.org>2023-01-06 13:39:21 -0500
committerSteven Rostedt (Google) <rostedt@goodmis.org>2023-01-09 13:12:37 -0500
commit85f75900c2fb12b4d91dc9e0685cbeec8a9a11c6 (patch)
treef32b11cbdde4a083dcd662c63452843aac3486b0
parent422d37425a0861b5b932f850752b2ac0f2f4b050 (diff)
downloadtrace-cmd-85f75900c2fb12b4d91dc9e0685cbeec8a9a11c6.tar.gz
trace-cmd library: Set recorder to nonblock when finished
When the recorder is signaled to stop, make sure it only reads in non-blocking mode. Link: https://lore.kernel.org/linux-trace-devel/20230106183930.12565-2-rostedt@goodmis.org Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
-rw-r--r--lib/trace-cmd/trace-recorder.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/trace-cmd/trace-recorder.c b/lib/trace-cmd/trace-recorder.c
index f387091f..bb02f7b8 100644
--- a/lib/trace-cmd/trace-recorder.c
+++ b/lib/trace-cmd/trace-recorder.c
@@ -317,11 +317,12 @@ static inline void update_fd(struct tracecmd_recorder *recorder, int size)
*/
static long read_data(struct tracecmd_recorder *recorder)
{
+ bool nonblock = recorder->stop;
char buf[recorder->subbuf_size];
long left;
long r, w;
- r = tracefs_cpu_read(recorder->tcpu, buf, false);
+ r = tracefs_cpu_read(recorder->tcpu, buf, nonblock);
left = r;
do {
@@ -344,11 +345,13 @@ static long read_data(struct tracecmd_recorder *recorder)
*/
static long direct_splice_data(struct tracecmd_recorder *recorder)
{
- return tracefs_cpu_pipe(recorder->tcpu, recorder->fd, false);
+ bool nonblock = recorder->stop;
+ return tracefs_cpu_pipe(recorder->tcpu, recorder->fd, nonblock);
}
static long move_data(struct tracecmd_recorder *recorder)
{
+ bool nonblock = recorder->stop;
long ret;
if (recorder->flags & TRACECMD_RECORD_NOSPLICE)
@@ -357,7 +360,7 @@ static long move_data(struct tracecmd_recorder *recorder)
if (recorder->flags & TRACECMD_RECORD_NOBRASS)
return direct_splice_data(recorder);
- ret = tracefs_cpu_write(recorder->tcpu, recorder->fd, false);
+ ret = tracefs_cpu_write(recorder->tcpu, recorder->fd, nonblock);
if (ret > 0)
update_fd(recorder, ret);
return ret;