From 868314beb96c971d24f3a3a430bd36d3dbd20229 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Fri, 25 May 2012 10:48:47 -0700 Subject: [PATCH] librdmacm: Delay ACM connection until resolving an address Avoid creating a connection to the ACM service when it's not needed. For example, if the user of the librdmacm is a server application, it will not use ACM services. Signed-off-by: Sean Hefty --- src/acm.c | 22 +++++++++++++--------- src/cma.c | 2 -- src/cma.h | 2 -- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/acm.c b/src/acm.c index 9c659195..5bdeb88d 100755 --- a/src/acm.c +++ b/src/acm.c @@ -89,26 +89,30 @@ static void ucma_set_server_port(void) void ucma_ib_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 out; memset(&addr, 0, sizeof addr); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); addr.sin_port = htons(server_port); ret = connect(sock, (struct sockaddr *) &addr, sizeof(addr)); - if (ret) - goto err; - - return; - -err: - close(sock); - sock = -1; + if (ret) { + close(sock); + sock = -1; + } +out: + init = 1; + pthread_mutex_unlock(&acm_lock); } void ucma_ib_cleanup(void) diff --git a/src/cma.c b/src/cma.c index 753612c5..f688c4c2 100755 --- a/src/cma.c +++ b/src/cma.c @@ -274,8 +274,6 @@ int ucma_init(void) 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); diff --git a/src/cma.h b/src/cma.h index 2f5215c1..2ee47675 100644 --- a/src/cma.h +++ b/src/cma.h @@ -119,11 +119,9 @@ extern int af_ib_support; #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); #else -#define ucma_ib_init() #define ucma_ib_cleanup() #define ucma_ib_resolve(x, y) #endif -- 2.45.2