In case of EEXIST, 'dpdk_mp_create()' will allocate yet another 'struct dpdk_mp' with same 'mp' pointer inside. We need to free this structure to avoid the leak.
CC: Robert Wojciechowicz <[email protected]> CC: Antonio Fischetti <[email protected]> Fixes: d555d9bded5f ("netdev-dpdk: Create separate memory pool for each port.") Fixes: b6b26021d2e2 ("netdev-dpdk: fix management of pre-existing mempools.") Signed-off-by: Ilya Maximets <[email protected]> Acked-by: Antonio Fischetti <[email protected]> --- lib/netdev-dpdk.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index 76e79be..ad52a03 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -659,6 +659,12 @@ netdev_dpdk_mempool_configure(struct netdev_dpdk *dev) * Update dev with the new values. */ dev->mtu = dev->requested_mtu; dev->max_packet_len = MTU_TO_FRAME_LEN(dev->mtu); + /* 'mp' should contain pointer to the mempool already owned by netdev. + * Otherwise something went completely wrong. */ + ovs_assert(dev->dpdk_mp); + ovs_assert(dev->dpdk_mp->mp == mp->mp); + /* Free the returned struct dpdk_mp because it will not be used. */ + rte_free(mp); return EEXIST; } else { /* A new mempool was created, release the previous one. */ -- 2.7.4 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
