summaryrefslogtreecommitdiffstats
path: root/rpc/rpc-transport/rdma/src/rdma.c
diff options
context:
space:
mode:
authorRaghavendra G <raghavendra@gluster.com>2010-10-08 20:21:59 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-10-09 06:36:58 -0700
commitd1f938c16e309431382ab9aaa32d50bf0ccd3260 (patch)
tree79e56063ab268acb8c2ba84057d3a94280677a84 /rpc/rpc-transport/rdma/src/rdma.c
parent0ccb63dbc52f66975205baf8452d2b57418da4aa (diff)
rpc-transport/rdma: fix the bug which was causing an ioq-entry being mem_put twice.
- in case of failure to send message, ioq-entry would be freed, but it used to get added to the ioq-list. Failure in sending a message (for reasons other than insufficient quota), would result in transport being disconnected. In the process of handling pollerr, when ioq-list is flushed, the same ioq-entry which would've already been freed, would be freed for second time. - this patch also fixes spurious disconnects happening when quota was not available while sending a request. Signed-off-by: Raghavendra G <raghavendra@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1854 (GlusterFS 3.1 beta crashes over Infiniband with rdma issue) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1854
Diffstat (limited to 'rpc/rpc-transport/rdma/src/rdma.c')
-rw-r--r--rpc/rpc-transport/rdma/src/rdma.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c
index 00664963c39..30f77f33128 100644
--- a/rpc/rpc-transport/rdma/src/rdma.c
+++ b/rpc/rpc-transport/rdma/src/rdma.c
@@ -1682,6 +1682,8 @@ __rdma_ioq_churn_entry (rdma_peer_t *peer, rdma_ioq_t *entry)
if (ret != 0) {
__rdma_ioq_entry_free (entry);
}
+ } else {
+ ret = 0;
}
out:
@@ -1740,7 +1742,7 @@ rdma_writev (rpc_transport_t *this,
peer = &priv->peer;
if (list_empty (&peer->ioq)) {
ret = __rdma_ioq_churn_entry (peer, entry);
- if (ret > 0) {
+ if (ret != 0) {
need_append = 0;
}
}