The "tracing/saved_cmdlines" files contains the PID to command name mapping. This mapping is used when displaying the trace events. The file is updatated during the trace, but is saved in the trace.dat file just before the trace starts. This could lead to missed mapping entries, appeared during the trace. The saving of "tracing/saved_cmdlines" into trace.dat file is moved after the trace completes. Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@xxxxxxxxx> --- lib/trace-cmd/trace-output.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/trace-cmd/trace-output.c b/lib/trace-cmd/trace-output.c index 4a9a857d..cd7dcec8 100644 --- a/lib/trace-cmd/trace-output.c +++ b/lib/trace-cmd/trace-output.c @@ -917,12 +917,6 @@ create_file_fd(int fd, struct tracecmd_input *ihandle, if (read_ftrace_printk(handle)) goto out_free; - /* - * Save the command lines; - */ - if (save_tracing_file_data(handle, "saved_cmdlines") < 0) - goto out_free; - return handle; out_free: @@ -1215,6 +1209,11 @@ struct tracecmd_output *tracecmd_create_file_latency(const char *output_file, in if (!handle) return NULL; + /* + * Save the command lines; + */ + if (save_tracing_file_data(handle, "saved_cmdlines") < 0) + goto out_free; if (tracecmd_write_cpus(handle, cpus) < 0) goto out_free; @@ -1351,6 +1350,13 @@ int tracecmd_append_cpu_data(struct tracecmd_output *handle, { int ret; + /* + * Save the command lines; + */ + ret = save_tracing_file_data(handle, "saved_cmdlines"); + if (ret) + return ret; + ret = tracecmd_write_cpus(handle, cpus); if (ret) return ret; -- 2.26.2