[dpdk-dev] librte_port: fix mbuf allocation in source port
Commit Message
Fixes the mbuf allocation not initialized problem. This problem will cause
the mbufs not be able to freed back to mempool by rte_pktmbuf_free().
The problem was introduced by commit "Packet Framework librte_port: Source
/Sink ports" (commit id ef3403fb6f9a3c4b730d2e4fbe7ddc0291ffa992)
Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
lib/librte_port/rte_port_source_sink.c | 6 ++++++
1 file changed, 6 insertions(+)
Comments
2015-11-30 20:41, Fan Zhang:
> Fixes the mbuf allocation not initialized problem. This problem will cause
> the mbufs not be able to freed back to mempool by rte_pktmbuf_free().
>
> The problem was introduced by commit "Packet Framework librte_port: Source
> /Sink ports" (commit id ef3403fb6f9a3c4b730d2e4fbe7ddc0291ffa992)
>
> Signed-off-by: Fan Zhang <roy.fan.zhang@intel.com>
> Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
Applied, thanks
@@ -105,10 +105,16 @@ static int
rte_port_source_rx(void *port, struct rte_mbuf **pkts, uint32_t n_pkts)
{
struct rte_port_source *p = (struct rte_port_source *) port;
+ uint32_t i;
if (rte_mempool_get_bulk(p->mempool, (void **) pkts, n_pkts) != 0)
return 0;
+ for (i = 0; i < n_pkts; i++) {
+ rte_mbuf_refcnt_set(pkts[i], 1);
+ rte_pktmbuf_reset(pkts[i]);
+ }
+
RTE_PORT_SOURCE_STATS_PKTS_IN_ADD(p, n_pkts);
return n_pkts;