RDMA/cma: Delete from restrack DB after successful destroy
authorLeon Romanovsky <leonro@mellanox.com>
Tue, 22 Sep 2020 09:11:02 +0000 (12:11 +0300)
committerJason Gunthorpe <jgg@nvidia.com>
Tue, 22 Sep 2020 22:47:34 +0000 (19:47 -0300)
Update the code to have similar destroy pattern like other IB objects.

This change create asymmetry to the rdma_id_private create flow to make
sure that memory is managed by restrack.

Link: https://lore.kernel.org/r/20200922091106.2152715-2-leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/infiniband/core/cma.c

index 22bd892c4aa8a5ed27db467e0db330ddfd3ae2b5..22f0b7ccdd6c9ab6817a5e3d7ebd7a07f4e60e17 100644 (file)
@@ -1804,7 +1804,6 @@ static void _destroy_id(struct rdma_id_private *id_priv,
 {
        cma_cancel_operation(id_priv, state);
 
-       rdma_restrack_del(&id_priv->res);
        if (id_priv->cma_dev) {
                if (rdma_cap_ib_cm(id_priv->id.device, 1)) {
                        if (id_priv->cm_id.ib)
@@ -1830,6 +1829,7 @@ static void _destroy_id(struct rdma_id_private *id_priv,
                rdma_put_gid_attr(id_priv->id.route.addr.dev_addr.sgid_attr);
 
        put_net(id_priv->id.route.addr.dev_addr.net);
+       rdma_restrack_del(&id_priv->res);
        kfree(id_priv);
 }
 
@@ -3721,7 +3721,6 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)
 
        return 0;
 err2:
-       rdma_restrack_del(&id_priv->res);
        if (id_priv->cma_dev)
                cma_release_dev(id_priv);
 err1: