On Thu, 11 Nov 2021 17:09:33 +0200 "Tzvetomir Stoyanov (VMware)" <tz.stoyanov@xxxxxxxxx> wrote: > In trace file version 7, the CPU trace metadata is saved in a trace > option. As this metadata has file offsets, which depend on the CPU trace > data, the option must be written in the file after the CPU trace data. > > Signed-off-by: Tzvetomir Stoyanov (VMware) <tz.stoyanov@xxxxxxxxx> > --- > tracecmd/trace-record.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/tracecmd/trace-record.c b/tracecmd/trace-record.c > index 757dab0f..32270e20 100644 > --- a/tracecmd/trace-record.c > +++ b/tracecmd/trace-record.c > @@ -4449,6 +4449,9 @@ static void write_guest_file(struct buffer_instance *instance) > > if (tracecmd_write_cpu_data(handle, cpu_count, temp_files, NULL) < 0) > die("failed to write CPU data"); > + if (tracecmd_get_out_file_version(handle) >= FILE_VERSION_SECTIONS) Can't this be detected on close? That is, if the handle has pending options to write out, and the handle has sections, can't the tracecmd_output_close() write it out then? Why make this something the user must worry about? -- Steve > + tracecmd_write_options(handle); > + > tracecmd_output_close(handle); > > for (i = 0; i < cpu_count; i++) > @@ -4597,7 +4600,8 @@ static void record_data(struct common_record_context *ctx) > append_buffer(handle, instance, temp_files); > } > } > - > + if (tracecmd_get_out_file_version(handle) >= FILE_VERSION_SECTIONS) > + tracecmd_write_options(handle); > free(temp_files); > } > if (!handle)