For self-IB loopback is special mode and the c_passive conn is just a
place holder to stick the the second QP.
Orabug:
22347191
Tested-by: Michael Nowak <michael.nowak@oracle.com>
Tested-by: Rafael Alejandro Peralez <rafael.peralez@oracle.com>
Tested-by: Liwen Huang <liwen.huang@oracle.com>
Tested-by: Hong Liu <hong.x.liu@oracle.com>
Reviewed-by: Mukesh Kacker <mukesh.kacker@oracle.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
"ADDR_CHANGE: calling rds_conn_drop <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n",
NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr),
conn->c_tos);
- rds_conn_drop(conn, DR_IB_ADDR_CHANGE);
+ if (!rds_conn_self_loopback_passive(conn))
+ rds_conn_drop(conn, DR_IB_ADDR_CHANGE);
}
break;
return atomic_read(&conn->c_state) == RDS_CONN_CONNECTING;
}
+static inline bool
+rds_conn_self_loopback_passive(struct rds_connection *conn)
+{
+ if (conn->c_laddr == conn->c_faddr && !conn->c_passive)
+ return true;
+ else
+ return false;
+}
+
/* message.c */
struct rds_message *rds_message_alloc(unsigned int nents, gfp_t gfp);
struct scatterlist *rds_message_alloc_sgs(struct rds_message *rm, int nents);