[openib-general] [PATCH] rdma_bind_addr() leaks a cma_dev reference count
Michael S. Tsirkin
mst at mellanox.co.il
Mon Oct 16 22:23:03 PDT 2006
Quoting r. Krishna Kumar <krkumar2 at in.ibm.com>:
> Subject: [PATCH] rdma_bind_addr() leaks a cma_dev reference count
>
> rdma_bind_addr leaks a cma_dev reference count in failure
> case.
>
> Signed-off-by: Krishna Kumar <krkumar2 at in.ibm.com>
> --------
> diff -ruNp org/drivers/infiniband/core/cma.c new/drivers/infiniband/core/cma.c
> --- org/drivers/infiniband/core/cma.c 2006-10-09 17:13:41.000000000 +0530
> +++ new/drivers/infiniband/core/cma.c 2006-10-09 19:42:31.000000000 +0530
> @@ -1749,6 +1749,7 @@ static int cma_get_port(struct rdma_id_p
> int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)
> {
> struct rdma_id_private *id_priv;
> + int did_acquire_dev = 0;
> int ret;
>
> if (addr->sa_family != AF_INET)
> @@ -1765,18 +1766,20 @@ int rdma_bind_addr(struct rdma_cm_id *id
> ret = cma_acquire_dev(id_priv);
> mutex_unlock(&lock);
> }
> - if (ret)
> - goto err;
> + if (!ret)
> + did_acquire_dev = 1;
> + else
> + goto out;
> }
> -
> memcpy(&id->route.addr.src_addr, addr, ip_addr_size(addr));
> ret = cma_get_port(id_priv);
> - if (ret)
> - goto err;
>
> - return 0;
> -err:
> - cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_IDLE);
> +out:
> + if (ret) {
> + if (did_acquire_dev)
> + cma_detach_from_dev(id_priv);
> + cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_IDLE);
> + }
> return ret;
> }
> EXPORT_SYMBOL(rdma_bind_addr);
Ugh, replacing two labels with an if statement is uglifying code: look how
nesting got 2-deep already. Please do the error handling the usual linux way
without testing flags:
if (ret)
goto err
....
err:
cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_IDLE);
out:
return ret;
is better than
if (ret)
goto out;
....
out:
if (ret)
cma_comp_exch(id_priv, CMA_ADDR_BOUND, CMA_IDLE);
look up Documentation/CodingStyle Chapter 7: Centralized exiting of functions
which says unconditional statements are easier to understand and follow,
and note that with this style nesting is reduced.
--
MST
More information about the general
mailing list