|
@@ -2971,25 +2971,19 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
|
|
|
int ret;
|
|
|
|
|
|
id_priv = container_of(id, struct rdma_id_private, id);
|
|
|
- memcpy(cma_dst_addr(id_priv), dst_addr, rdma_addr_size(dst_addr));
|
|
|
if (id_priv->state == RDMA_CM_IDLE) {
|
|
|
ret = cma_bind_addr(id, src_addr, dst_addr);
|
|
|
- if (ret) {
|
|
|
- memset(cma_dst_addr(id_priv), 0, rdma_addr_size(dst_addr));
|
|
|
+ if (ret)
|
|
|
return ret;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
- if (cma_family(id_priv) != dst_addr->sa_family) {
|
|
|
- memset(cma_dst_addr(id_priv), 0, rdma_addr_size(dst_addr));
|
|
|
+ if (cma_family(id_priv) != dst_addr->sa_family)
|
|
|
return -EINVAL;
|
|
|
- }
|
|
|
|
|
|
- if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_BOUND, RDMA_CM_ADDR_QUERY)) {
|
|
|
- memset(cma_dst_addr(id_priv), 0, rdma_addr_size(dst_addr));
|
|
|
+ if (!cma_comp_exch(id_priv, RDMA_CM_ADDR_BOUND, RDMA_CM_ADDR_QUERY))
|
|
|
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);
|