}
}
-void ucma_ib_init(void)
+void ucma_acm_init(void)
{
struct sockaddr_in addr;
+ static int init;
int ret;
+ if (init)
+ return;
+
+ pthread_mutex_lock(&acm_lock);
ucma_set_server_port();
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0)
- return;
+ goto err1;
memset(&addr, 0, sizeof addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(server_port);
ret = connect(sock, (struct sockaddr *) &addr, sizeof(addr));
if (ret)
- goto err;
+ goto err2;
+ init = 1;
+ pthread_mutex_unlock(&acm_lock);
return;
-err:
+err2:
close(sock);
sock = -1;
+err1:
+ init = 1;
+ pthread_mutex_unlock(&acm_lock);
}
void ucma_ib_cleanup(void)
}
if (!(rai->ai_flags & RAI_PASSIVE))
- ucma_ib_resolve(&rai, hints);
+ ucma_acm_resolve(&rai, hints);
*res = rai;
return 0;
static void ucma_cleanup(void)
{
- ucma_ib_cleanup();
+ ucma_acm_cleanup();
if (cma_dev_cnt) {
while (cma_dev_cnt--) {
ib += (cma_dev->verbs->device->transport_type == IBV_TRANSPORT_IB);
}
- if (ib)
- ucma_ib_init();
cma_dev_cnt = dev_cnt;
ucma_set_af_ib_support();
pthread_mutex_unlock(&mut);
#define RAI_ROUTEONLY 0x01000000
#ifdef USE_IB_ACM
-void ucma_ib_init();
-void ucma_ib_cleanup();
-void ucma_ib_resolve(struct rdma_addrinfo **rai, struct rdma_addrinfo *hints);
+void ucma_acm_cleanup();
+void ucma_acm_resolve(struct rdma_addrinfo **rai, struct rdma_addrinfo *hints);
#else
-#define ucma_ib_init()
-#define ucma_ib_cleanup()
-#define ucma_ib_resolve(x, y)
+#define ucma_acm_cleanup()
+#define ucma_acm_resolve(x, y)
#endif
/* Define path record definition if using older version of libibverbs */