diff options
| -rw-r--r-- | rpc/rpc-transport/rdma/src/rdma.c | 26 | 
1 files changed, 17 insertions, 9 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c index 4c01c14a927..3ceb197f2a3 100644 --- a/rpc/rpc-transport/rdma/src/rdma.c +++ b/rpc/rpc-transport/rdma/src/rdma.c @@ -58,6 +58,8 @@ gf_rdma_disconnect (rpc_transport_t *this);  static void  gf_rdma_cm_handle_disconnect (rpc_transport_t *this); +static int +gf_rdma_cm_handle_connect_init (struct rdma_cm_event *event);  static void  gf_rdma_put_post (gf_rdma_queue_t *queue, gf_rdma_post_t *post) @@ -785,7 +787,7 @@ gf_rdma_cm_handle_connect_request (struct rdma_cm_event *event)          rpc_transport_t        *this        = NULL, *listener = NULL;          struct rdma_cm_id      *child_cm_id = NULL, *listener_cm_id = NULL;          struct rdma_conn_param  conn_param  = {0, }; -        gf_rdma_private_t      *priv        = NULL, *child_priv = NULL; +        gf_rdma_private_t      *priv        = NULL;          gf_rdma_options_t      *options     = NULL;          child_cm_id = event->id; @@ -804,7 +806,7 @@ gf_rdma_cm_handle_connect_request (struct rdma_cm_event *event)                  rdma_destroy_id (child_cm_id);                  goto out;          } -        child_priv = this->private; +          gf_log (listener->name, GF_LOG_TRACE,                  "got a connect request (me:%s peer:%s)",                  listener->myinfo.identifier, this->peerinfo.identifier); @@ -831,7 +833,7 @@ gf_rdma_cm_handle_connect_request (struct rdma_cm_event *event)                  gf_rdma_cm_handle_disconnect (this);                  goto out;          } -        child_priv->connected = 1; +        gf_rdma_cm_handle_connect_init (event);          ret = 0;  out: @@ -965,7 +967,7 @@ gf_rdma_cm_handle_disconnect (rpc_transport_t *this)  static int -gf_rdma_cm_handle_event_established (struct rdma_cm_event *event) +gf_rdma_cm_handle_connect_init (struct rdma_cm_event *event)  {          rpc_transport_t   *this  = NULL;          gf_rdma_private_t *priv  = NULL; @@ -976,6 +978,13 @@ gf_rdma_cm_handle_event_established (struct rdma_cm_event *event)          this = cm_id->context;          priv = this->private; +        if (priv->connected == 1) { +                gf_log (this->name, GF_LOG_TRACE, +                        "received event RDMA_CM_EVENT_ESTABLISHED (me:%s peer:%s)", +                        this->myinfo.identifier, this->peerinfo.identifier); +                return ret; +        } +          priv->connected = 1;          pthread_mutex_lock (&priv->write_mutex); @@ -986,6 +995,9 @@ gf_rdma_cm_handle_event_established (struct rdma_cm_event *event)          pthread_mutex_unlock (&priv->write_mutex);          if (priv->entity == GF_RDMA_CLIENT) { +                gf_log (this->name, GF_LOG_TRACE, +                        "received event RDMA_CM_EVENT_ESTABLISHED (me:%s peer:%s)", +                        this->myinfo.identifier, this->peerinfo.identifier);                  ret = rpc_transport_notify (this, RPC_TRANSPORT_CONNECT, this);          } else if (priv->entity == GF_RDMA_SERVER) { @@ -997,10 +1009,6 @@ gf_rdma_cm_handle_event_established (struct rdma_cm_event *event)                  gf_rdma_disconnect (this);          } -        gf_log (this->name, GF_LOG_TRACE, -                "received event RDMA_CM_EVENT_ESTABLISHED (me:%s peer:%s)", -                this->myinfo.identifier, this->peerinfo.identifier); -          return ret;  } @@ -1060,7 +1068,7 @@ gf_rdma_cm_event_handler (void *data)                          break;                  case RDMA_CM_EVENT_ESTABLISHED: -                        gf_rdma_cm_handle_event_established (event); +                        gf_rdma_cm_handle_connect_init (event);                          break;                  case RDMA_CM_EVENT_ADDR_ERROR:  | 
