From: "Steven Rostedt (Google)" <rostedt@xxxxxxxxxxx> The flushing of the data read in the splice pipe was missing from tracefs_cpu_flush(). It had a mysterious goto statement that went to the next line?? Anyway, add the code to read the data still in the pipe. Signed-off-by: Steven Rostedt (Google) <rostedt@xxxxxxxxxxx> --- src/tracefs-record.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/tracefs-record.c b/src/tracefs-record.c index 428bec0dfe3d..459c346c6017 100644 --- a/src/tracefs-record.c +++ b/src/tracefs-record.c @@ -464,10 +464,13 @@ int tracefs_cpu_flush(struct tracefs_cpu *tcpu, void *buffer) if (tcpu->buffered < 0) tcpu->buffered = 0; - if (tcpu->buffered) - goto do_read; + if (tcpu->buffered) { + ret = read(tcpu->splice_pipe[0], buffer, tcpu->subbuf_size); + if (ret > 0) + tcpu->buffered -= ret; + return ret; + } - do_read: ret = read(tcpu->fd, buffer, tcpu->subbuf_size); if (ret > 0 && tcpu->buffered) tcpu->buffered -= ret; -- 2.35.1