diff options
author | Rao Shoaib <rao.shoaib@oracle.com> | 2020-07-01 21:23:38 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-07-02 02:35:17 +0200 |
commit | 9ef845f894c93416a1cbcbc6ec42525fb06aaf4e (patch) | |
tree | e41a8039fc5a2fc3ddf8c1f00a4ef762020f1f92 /net/rds/connection.c | |
parent | tcp: md5: refine tcp_md5_do_add()/tcp_md5_hash_key() barriers (diff) | |
download | linux-9ef845f894c93416a1cbcbc6ec42525fb06aaf4e.tar.xz linux-9ef845f894c93416a1cbcbc6ec42525fb06aaf4e.zip |
rds: If one path needs re-connection, check all and re-connect
In testing with mprds enabled, Oracle Cluster nodes after reboot were
not able to communicate with others nodes and so failed to rejoin
the cluster. Peers with lower IP address initiated connection but the
node could not respond as it choose a different path and could not
initiate a connection as it had a higher IP address.
With this patch, when a node sends out a packet and the selected path
is down, all other paths are also checked and any down paths are
re-connected.
Reviewed-by: Ka-cheong Poon <ka-cheong.poon@oracle.com>
Reviewed-by: David Edmondson <david.edmondson@oracle.com>
Signed-off-by: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
Signed-off-by: Rao Shoaib <rao.shoaib@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rds/connection.c')
-rw-r--r-- | net/rds/connection.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/net/rds/connection.c b/net/rds/connection.c index ed7f2133acc2..f2fcab182095 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -905,6 +905,17 @@ void rds_conn_path_connect_if_down(struct rds_conn_path *cp) } EXPORT_SYMBOL_GPL(rds_conn_path_connect_if_down); +/* Check connectivity of all paths + */ +void rds_check_all_paths(struct rds_connection *conn) +{ + int i = 0; + + do { + rds_conn_path_connect_if_down(&conn->c_path[i]); + } while (++i < conn->c_npaths); +} + void rds_conn_connect_if_down(struct rds_connection *conn) { WARN_ON(conn->c_trans->t_mp_capable); |