diff options
| author | Raghavendra G <raghavendra@gluster.com> | 2010-10-02 07:36:33 +0000 | 
|---|---|---|
| committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-10-02 07:04:19 -0700 | 
| commit | 33d7a49bd55d6810d87811c109c7445e27b04c17 (patch) | |
| tree | c54a896e16677cf10396e128f6a62f4d79fdd8a8 | |
| parent | 1b7a997a7b368aa459dcd57ec23532fe4cdd6e0c (diff) | |
rpc-transport/rdma: send disconnect event only if the transport is already connected.
- A disconnect event can be sent before a connect event to rpc, if some error
    happens during rdma handshake.
  - Also call rdma_quota_put only if peer is not NULL.
Signed-off-by: Raghavendra G <raghavendra@gluster.com>
Signed-off-by: Vijay Bellur <vijay@dev.gluster.com>
BUG: 513 (Introduce 0 copy rdma)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=513
| -rw-r--r-- | rpc/rpc-transport/rdma/src/rdma.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c index 27a64d86ead..0f9699d09ba 100644 --- a/rpc/rpc-transport/rdma/src/rdma.c +++ b/rpc/rpc-transport/rdma/src/rdma.c @@ -3493,7 +3493,8 @@ rdma_send_completion_proc (void *data)                                  if ((ret == 0)                                      && (wc.status == IBV_WC_SUCCESS)                                      && !is_request -                                    && (post->type == RDMA_SEND_POST)) { +                                    && (post->type == RDMA_SEND_POST) +                                    && (peer != NULL)) {                                          /* An RDMA_RECV_POST can end up in                                           * rdma_send_completion_proc for                                            * rdma-reads, and we do not take @@ -4226,7 +4227,7 @@ rdma_handshake_pollerr (rpc_transport_t *this)  {          rdma_private_t *priv = this->private;          int32_t ret = 0; -        char need_unref = 0; +        char need_unref = 0, connected = 0;          gf_log (RDMA_LOG_NAME, GF_LOG_DEBUG,                  "%s: peer disconnected, cleaning up", @@ -4236,6 +4237,7 @@ rdma_handshake_pollerr (rpc_transport_t *this)          {                  __rdma_teardown (this); +                connected = priv->connected;                  if (priv->sock != -1) {                          event_unregister (this->ctx->event_pool,                                             priv->sock, priv->idx); @@ -4267,7 +4269,9 @@ rdma_handshake_pollerr (rpc_transport_t *this)          }          pthread_mutex_unlock (&priv->write_mutex); -        rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this); +        if (connected) { +                rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this); +        }          if (need_unref)                  rpc_transport_unref (this);  | 
