RDS fails to realize the negotiated version and keeps rejecting the peer's
connect request, causing the connection to stall during reconnect.
Orabug:
17375389
Signed-off-by: Giri Adari <giri.adari@oracle.com>
(cherry picked from commit
34a2edd27ec65cbeb003a3d2e22cb6da57e90798)
goto out;
}
- if (conn->c_reconnect && (conn->c_version != version)) {
+ if (conn->c_reconnect && (conn->c_version > version)) {
printk(KERN_WARNING "RDS/IB: connection "
"<%u.%u.%u.%u,%u.%u.%u.%u,%d,%u.%u> rejecting version "
"(%u/%u)\n",
case RDMA_CM_EVENT_REJECTED:
err = (int *)event->param.conn.private_data;
if (conn) {
- if (!conn->c_reconnect) {
+ if (!conn->c_reconnect || conn->c_committed_version ==
+ RDS_PROTOCOL_COMPAT_VERSION) {
if ((*err) == 0 &&
event->status == RDS_REJ_CONSUMER_DEFINED) {
/* rejection from 3.x protocol */
/* Protocol version */
unsigned int c_proposed_version;
+ unsigned int c_committed_version;
unsigned int c_version;
/* Re-connect stall diagnostics */
conn->c_connection_start = get_seconds();
conn->c_reconnect = 1;
+ conn->c_committed_version = conn->c_version;
+ conn->c_proposed_version = RDS_PROTOCOL_VERSION;
}
EXPORT_SYMBOL_GPL(rds_connect_complete);