mbuf refcnt issue
Lombardo, Ed
Ed.Lombardo at netscout.com
Wed Apr 9 06:46:09 CEST 2025
Hi Stephen,
I am looking a the rte_mbuf.h file for rte_pktmbuf_free() and it is not clear to me that it checks if the mbuf refcnt is 1 before decrementing it and allowing the mbuf and segments (if any) to be returned to free pool.
Could my application issue be I have tx threads that transmit packets and does rte_pktmbuf_free(), while one other thread will perform rte_pktmbuf_free() on the same mbuf? I ensured I bump the mbuf refcnt to 2 before other threads can process the same mbuf.
Thanks,
Ed
-----Original Message-----
From: Stephen Hemminger <stephen at networkplumber.org>
Sent: Tuesday, April 8, 2025 11:54 PM
To: Lombardo, Ed <Ed.Lombardo at netscout.com>
Cc: Dmitry Kozlyuk <dmitry.kozliuk at gmail.com>; users at dpdk.org
Subject: Re: mbuf refcnt issue
External Email: This message originated outside of NETSCOUT. Do not click links or open attachments unless you recognize the sender and know the content is safe.
On Tue, 8 Apr 2025 22:33:56 +0000
"Lombardo, Ed" <Ed.Lombardo at netscout.com> wrote:
> Hi Dmitry,
> I added mbuf refcnt check at the point where we get the packets from DPDK rte_eth_rx_burst() and I am finding many mbufs refcnt set to 2 when I expect them to be 1. This is more evidence that something has gone wrong within DPDK and the mempool management, perhaps, and I don't know how my setup went into this state. I changed the traffic type from Telnet to Enterprise traffic and rte_eth_tx_burst() no longer accepts mbufs.
Not likely a DPDK bug. More likely you are having application problems.
Have you tried enabling things like RTE_LIBRTE_MBUF_DEBUG and RTE_LIBRTE_MEMPOOL_DEBUG and RTE_ENABLE_ASSERT?
Also using a current version of DPDK, address sanitizer, and latest GCC or CLANG can uncover issues with use after free.
More information about the users
mailing list