[PATCH v7 3/7] mbuf: record mbuf operations history

Morten Brørup mb at smartsharesystems.com
Fri Oct 17 09:55:30 CEST 2025


> From: Thomas Monjalon [mailto:thomas at monjalon.net]
> Sent: Friday, 17 October 2025 09.32
> 
> 17/10/2025 00:29, Morten Brørup:
> > > +	/* Calculate total allocated mbufs */
> > > +	uint64_t total_allocated = 0;
> > > +	for (enum rte_mbuf_history_op op = RTE_MBUF_HISTORY_OP_LIB_ALLOC;
> > > +			op < RTE_MBUF_HISTORY_OP_MAX; op++)
> > > +		total_allocated += stats[op];
> >
> > I might be overly cautious here, but the app (or driver) might have a
> bug, and mark the mbuf with OP_APP_FREE (or OP_PMD_FREE) without
> actually freeing the mbuf back to the mempool.
> 
> Yes
> 
> > So you should only trust the mempool library (OP_LIB_FREE) to mark
> the mbuf as actually freed. I.e. start the loop at op =
> RTE_MBUF_HISTORY_OP_LIB_FREE.
> 
> We cannot because these statistics are about the latest state.
> So if the app marks the mbuf as freed after the library,
> they should be reported as non allocated.

The app cannot mark the mbuf after calling rte_mbuf_raw_free_bulk(). That would be a "use after free" bug.

> 
> > The app/driver should eventually call rte_mbuf_raw_free_bulk() or
> similar to release the mbuf back to the mempool.
> 
> Because we don't know in which order the mbufs are marked
> in the call stack, we must trust these free ops.
> 
> I really think there is room for improvements in the details of the
> marks
> and their usage. I suggest we merge and play with this experimental
> feature,
> and discuss in the next cycle how to improve the markers.
> 

Since it's only a minor detail in the dump function that I'm having minor doubts about, merging as-is is OK with me.

It's more important getting the feature included than making it perfect at its introduction - as you mention yourself: it's an experimental feature.



More information about the dev mailing list