Re: [PATCH] libtracecmd: Fix continuing in tracecmd_iterate_events_reverse()

Steven Rostedt <[email protected]> Mon, 24 Nov 2025 11:49:25 -0500
Newsgroups org.kernel.vger.linux-trace-devel
Message-ID <[email protected]>
On Mon, 24 Nov 2025 09:10:06 +0000
"MOESSBAUER, Felix" <[email protected]> wrote:

> > +	/*
> > +	 * If the callback exited out early, then set the cursor back
> > +	 * to the location of that record so that if this gets called
> > +	 * again with cont = true, it will continue where it left off.
> > +	 */
> > +	if (page_offset) {
> > +		/* Set the record to the previous record that was read */
> > +		record = tracecmd_read_at(handle, page_offset - 4, NULL);  
> 
> Hi,
> 
> where does the magic "- 4" come from?

It's just to get to the previous record. - 1 would likely work, but as I
know all events are aligned by a minimum of 4 bytes I used that. I probably
should add a comment about that.

> 
> > +		tracecmd_free_record(record);  
> 
> I still don't get why this fixes the issue. Does tracecmd_read_at has a
> side-effect to set the the internal cursor? If so, it IMHO would help
> to document this side effect in tracecmd_read_at().

Hmm, I guess I should. Yes, that's one of the things I consider "obvious",
but "obvious" is seldom obvious ;-)

Pretty much all tracecmd_read*  functions set the internal cursor unless
stated otherwise.

-- Steve