summaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
authorMohammed Rafi KC <rkavunga@redhat.com>2014-09-18 04:21:04 -0400
committerRaghavendra G <rgowdapp@redhat.com>2014-11-17 23:30:55 -0800
commit43800dedb5f0b4644de913c3fd50c6b409ec7210 (patch)
treeb4f18aa51a7961728fd57144a23d159af5d72132 /rpc
parentcc57d9bee98270e6e961765716d421bf2f0950d3 (diff)
downloadglusterfs-43800dedb5f0b4644de913c3fd50c6b409ec7210.tar.gz
glusterfs-43800dedb5f0b4644de913c3fd50c6b409ec7210.tar.xz
glusterfs-43800dedb5f0b4644de913c3fd50c6b409ec7210.zip
rdma:rdma fuse mount hangs for tcp,rdma volumes if brick is down.
When we try to mount a tcp,rdma volume as rdma transport using FUSE protocol, then mount will hang if the brick is down. When we kill a process, signal will be received in glusterfsd process and it will call pmap_signout with port listening on tcp only. In case of the tcp,rdma there will be two ports, and port which is listening for rdma will not called for sign out. So the mount process will try to connect to a port which is not open and it will keep trying to connect. This patch will call pmap_signout for rdma port also, So when mount tries to get the brick port,it will fail. Change-Id: I23676f65f96eb90b69b76478f7a21412a6aba70f BUG: 1143886 Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com> Reviewed-on: http://review.gluster.org/8762 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Krishnan Parthasarathi <kparthas@redhat.com> Reviewed-by: Raghavendra G <rgowdapp@redhat.com> Tested-by: Raghavendra G <rgowdapp@redhat.com>
Diffstat (limited to 'rpc')
-rw-r--r--rpc/rpc-transport/rdma/src/rdma.c7
-rw-r--r--rpc/xdr/src/portmap-xdr.x1
2 files changed, 3 insertions, 5 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c
index 3ceb197f2a..89ed4558d7 100644
--- a/rpc/rpc-transport/rdma/src/rdma.c
+++ b/rpc/rpc-transport/rdma/src/rdma.c
@@ -938,7 +938,7 @@ static void
gf_rdma_cm_handle_disconnect (rpc_transport_t *this)
{
gf_rdma_private_t *priv = NULL;
- char need_unref = 0, connected = 0;
+ char need_unref = 0;
priv = this->private;
gf_log (this->name, GF_LOG_DEBUG,
@@ -948,7 +948,6 @@ gf_rdma_cm_handle_disconnect (rpc_transport_t *this)
{
if (priv->peer.cm_id != NULL) {
need_unref = 1;
- connected = priv->connected;
priv->connected = 0;
}
@@ -956,9 +955,7 @@ gf_rdma_cm_handle_disconnect (rpc_transport_t *this)
}
pthread_mutex_unlock (&priv->write_mutex);
- if (connected) {
- rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
- }
+ rpc_transport_notify (this, RPC_TRANSPORT_DISCONNECT, this);
if (need_unref)
rpc_transport_unref (this);
diff --git a/rpc/xdr/src/portmap-xdr.x b/rpc/xdr/src/portmap-xdr.x
index f60dcc76c8..7380de5e9c 100644
--- a/rpc/xdr/src/portmap-xdr.x
+++ b/rpc/xdr/src/portmap-xdr.x
@@ -47,6 +47,7 @@ struct pmap_signin_rsp {
struct pmap_signout_req {
string brick<>;
int port;
+ int rdma_port;
};
struct pmap_signout_rsp {