Thanks, I simplified it slightly and applied this to master and branch-2.6

2016-09-05 6:36 GMT-07:00 Ilya Maximets <i.maxim...@samsung.com>:

> 'dmp' should be freed on failure and on put.
>
> Fixes: 8a9562d21a40 ("dpif-netdev: Add DPDK netdev.")
> Fixes: 8d38823bdf8b ("netdev-dpdk: fix memory leak")
> Signed-off-by: Ilya Maximets <i.maxim...@samsung.com>
> ---
>  lib/netdev-dpdk.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
> index 6d334db..f7a6f82 100644
> --- a/lib/netdev-dpdk.c
> +++ b/lib/netdev-dpdk.c
> @@ -474,7 +474,7 @@ dpdk_mp_get(int socket_id, int mtu)
> OVS_REQUIRES(dpdk_mutex)
>      LIST_FOR_EACH (dmp, list_node, &dpdk_mp_list) {
>          if (dmp->socket_id == socket_id && dmp->mtu == mtu) {
>              dmp->refcount++;
> -            return dmp;
> +            goto out;
>          }
>      }
>
> @@ -499,7 +499,7 @@ dpdk_mp_get(int socket_id, int mtu)
> OVS_REQUIRES(dpdk_mutex)
>      do {
>          if (snprintf(mp_name, RTE_MEMPOOL_NAMESIZE, "ovs_mp_%d_%d_%u",
>                       dmp->mtu, dmp->socket_id, mp_size) < 0) {
> -            return NULL;
> +            goto fail;
>          }
>
>          dmp->mp = rte_mempool_create(mp_name, mp_size, MBUF_SIZE(mtu),
> @@ -511,12 +511,18 @@ dpdk_mp_get(int socket_id, int mtu)
> OVS_REQUIRES(dpdk_mutex)
>      } while (!dmp->mp && rte_errno == ENOMEM && (mp_size /= 2) >=
> MIN_NB_MBUF);
>
>      if (dmp->mp == NULL) {
> -        return NULL;
> +        goto fail;
>      } else {
>          VLOG_DBG("Allocated \"%s\" mempool with %u mbufs", mp_name,
> mp_size );
>      }
>
>      ovs_list_push_back(&dpdk_mp_list, &dmp->list_node);
> +    goto out;
> +
> +fail:
> +    rte_free(dmp);
> +    dmp = NULL;
> +out:
>      return dmp;
>  }
>
> @@ -532,6 +538,7 @@ dpdk_mp_put(struct dpdk_mp *dmp)
> OVS_REQUIRES(dpdk_mutex)
>      if (!--dmp->refcount) {
>          ovs_list_remove(&dmp->list_node);
>          rte_mempool_free(dmp->mp);
> +        rte_free(dmp);
>      }
>  }
>
> --
> 2.7.4
>
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to