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
This commit is contained in:
parent
0ccb63dbc5
commit
d1f938c16e
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user