|
@@ -2880,13 +2880,11 @@ static void addr_handler(int status, struct sockaddr *src_addr,
|
|
|
if (id_priv->id.event_handler(&id_priv->id, &event)) {
|
|
|
cma_exch(id_priv, RDMA_CM_DESTROYING);
|
|
|
mutex_unlock(&id_priv->handler_mutex);
|
|
|
- cma_deref_id(id_priv);
|
|
|
rdma_destroy_id(&id_priv->id);
|
|
|
return;
|
|
|
}
|
|
|
out:
|
|
|
mutex_unlock(&id_priv->handler_mutex);
|
|
|
- cma_deref_id(id_priv);
|
|
|
}
|
|
|
|
|
|
static int cma_resolve_loopback(struct rdma_id_private *id_priv)
|
|
@@ -2983,7 +2981,6 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
|
|
|
return -EINVAL;
|
|
|
|
|
|
memcpy(cma_dst_addr(id_priv), dst_addr, rdma_addr_size(dst_addr));
|
|
|
- atomic_inc(&id_priv->refcount);
|
|
|
if (cma_any_addr(dst_addr)) {
|
|
|
ret = cma_resolve_loopback(id_priv);
|
|
|
} else {
|
|
@@ -3001,7 +2998,6 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
|
|
|
return 0;
|
|
|
err:
|
|
|
cma_comp_exch(id_priv, RDMA_CM_ADDR_QUERY, RDMA_CM_ADDR_BOUND);
|
|
|
- cma_deref_id(id_priv);
|
|
|
return ret;
|
|
|
}
|
|
|
EXPORT_SYMBOL(rdma_resolve_addr);
|