[dpdk-dev] problem with rte_pktmbuf_prepend (possible bug?)
bmbenson at amazon.com
Tue Feb 18 18:16:10 CET 2014
Whoa, be careful, we used a custom init function and had a nasty bug because we assumed it was called on mbuf_free as well. The rte_pktmbuf_init function pointer passed into mempool create is only used at pool initialization time, not when an mbuf is freed - A reference to the obj_initi function is not stored anywhere for future use during mbuf_free.
Some of the fields are reset when the NIC has completed the send of the mbufs, but it does not use a custom function ptr.
From: dev [dev-bounces at dpdk.org] on behalf of Periklis Akritidis [akritid at niometrics.com]
Sent: Tuesday, February 18, 2014 6:19 AM
To: Mario Gianni
Cc: dev at dpdk.org
Subject: Re: [dpdk-dev] problem with rte_pktmbuf_prepend (possible bug?)
Are you passing rte_pktmbuf_init as the obj_init argument to rte_mempool_create?
It is called when the mbuf if freed and it will reset the fields. I vaguely remember I had the same issue at some point and resolved it somehow. This comes to mind.
On 18 Feb, 2014, at 6:27 pm, Mario Gianni <m.gianni at engineer.com> wrote:
> Hi all, I'm experimenting some code with DPDK v1.5.0 and I have the following problem:
> I have a thread that receives packets from NIC, once I received a packet I want to prepend some data to it and I try to do so through the function rte_pktmbuf_prepend()
> then the packet is enqueued in a ring buffer where it will be used by a client thread before being dropped through the function rte_pktmbuf_free() called by the client thread.
> Now, if I try to send packets to this program I have the following behaviour:
> In a first time it seems to work correctly, then after a certain number of received packets (approximately the same number as the number of mbufs present in the mempool) if I call the rte_pktmbuf_headroom it returns that the headroom is shrinking more than the expected, until after a certain number of packets the headroom goes to zero.
> It seems like that when I call the rte_pktmbuf_free() function it doesn't reset the data position inside the mbuf, so when I call for a second time the mbuf the headroom continues to shrink until it finishes.
> Do you have any idea of this strange behaviour?Could it be a bug in the prepend/free function?
> Thank you,
More information about the dev