From 4fe0a7974651cd7e1809dbf796b99afbf4fc9928 Mon Sep 17 00:00:00 2001 From: Wei Lin Guay Date: Thu, 10 Aug 2017 11:57:34 +0200 Subject: [PATCH] Revert "net/rds: determine active/passive connection with IP addresses" MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This reverts commit 1f2ea7a020a1 ("net/rds: determine active/passive connection with IP addresses"). The plan is to use the original, well tested one-sided reconnection that was reverted in "812c02791: RDS: restore the exponential back-off scheme". Orabug: 26497333 Signed-off-by: Wei Lin Guay Reviewed-by: HÃ¥kon Bugge Reviewed-by: Avinash Repaka Reviewed-by: Ajaykumar Hotchandani --- net/rds/ib_cm.c | 37 ------------------------------------- net/rds/rds.h | 1 - net/rds/threads.c | 22 ++++++---------------- 3 files changed, 6 insertions(+), 54 deletions(-) diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c index 98c14c6e2aa8..437d83e25655 100644 --- a/net/rds/ib_cm.c +++ b/net/rds/ib_cm.c @@ -922,14 +922,6 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id, * see the comment above rds_queue_reconnect() */ mutex_lock(&conn->c_cm_lock); - if (rds_conn_transition(conn, RDS_CONN_DOWN, RDS_CONN_DOWN) && - (conn->c_laddr < conn->c_faddr)) { - rds_rtd(RDS_RTD_CM_EXT_P, - "incoming passive connection is trying to connect %p\n", - conn); - rds_conn_drop(conn, DR_IB_CONN_DROP_RACE); - goto out; - } if (!rds_conn_transition(conn, RDS_CONN_DOWN, RDS_CONN_CONNECTING)) { /* * in both of the cases below, the conn is half setup. @@ -960,39 +952,10 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id, NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr), conn->c_tos); - rds_rtd(RDS_RTD_CM, "RDS/IB: connection " - " id %p conn %p " - "<%u.%u.%u.%u,%u.%u.%u.%u,%d> " - "racing for 15s, forcing reset\n", - cm_id, conn, - NIPQUAD(conn->c_laddr), - NIPQUAD(conn->c_faddr), - conn->c_tos); rds_conn_drop(conn, DR_IB_REQ_WHILE_CONNECTING); rds_ib_stats_inc(s_ib_listen_closed_stale); } else { /* Wait and see - our connect may still be succeeding */ - rds_rtd(RDS_RTD_CM, "RDS/IB: connection " - " id %p conn %p " - "<%u.%u.%u.%u,%u.%u.%u.%u,%d> " - " will be rejected\n", - cm_id, conn, - NIPQUAD(conn->c_laddr), - NIPQUAD(conn->c_faddr), - conn->c_tos); - if (test_and_clear_bit(RDS_INITIAL_RECONNECT, &conn->c_flags) || - (conn->c_laddr > conn->c_faddr) || - rds_conn_self_loopback_passive(conn)) { - rds_rtd(RDS_RTD_CM, "RDS/IB: connection " - " id %p conn %p " - "<%u.%u.%u.%u,%u.%u.%u.%u,%d> " - " will be rejected as passive conn\n", - cm_id, conn, - NIPQUAD(conn->c_laddr), - NIPQUAD(conn->c_faddr), - conn->c_tos); - rds_conn_drop(conn, DR_IB_CONN_DROP_RACE); - } rds_ib_stats_inc(s_ib_connect_raced); } } diff --git a/net/rds/rds.h b/net/rds/rds.h index d63fd7e5d24f..d26eb01463e6 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -137,7 +137,6 @@ enum { #define RDS_IN_XMIT 2 #define RDS_RECV_REFILL 3 #define RDS_DESTROY_PENDING 4 -#define RDS_INITIAL_RECONNECT 5 #define RDS_RDMA_RESOLVE_TO_MAX_INDEX 5 #define RDS_ADDR_RES_TM_INDEX_MAX 5 diff --git a/net/rds/threads.c b/net/rds/threads.c index 7071be360d73..f112359ff494 100644 --- a/net/rds/threads.c +++ b/net/rds/threads.c @@ -132,7 +132,6 @@ EXPORT_SYMBOL_GPL(rds_connect_complete); */ void rds_queue_reconnect(struct rds_conn_path *cp, int reason) { - unsigned long delay = 0; unsigned long rand; struct rds_connection *conn = cp->cp_conn; bool is_tcp = conn->c_trans->t_type == RDS_TRANS_TCP; @@ -146,31 +145,22 @@ void rds_queue_reconnect(struct rds_conn_path *cp, int reason) if (is_tcp && !IS_CANONICAL(conn->c_laddr, conn->c_faddr)) return; - if (reason == DR_IB_BASE_CONN_DOWN) { - cp->cp_reconnect_jiffies = 0; - delay = msecs_to_jiffies(500); - } - set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags); if (cp->cp_reconnect_jiffies == 0) { - set_bit(RDS_INITIAL_RECONNECT, &cp->cp_flags); - get_random_bytes(&rand, sizeof(rand)); cp->cp_reconnect_jiffies = rds_sysctl_reconnect_min_jiffies; - queue_delayed_work(cp->cp_wq, &cp->cp_conn_w, - delay + (rand % cp->cp_reconnect_jiffies)); + queue_delayed_work(cp->cp_wq, &cp->cp_conn_w, 0); return; } - clear_bit(RDS_INITIAL_RECONNECT, &cp->cp_flags); - if ((conn->c_laddr > conn->c_faddr) || - rds_conn_self_loopback_passive(conn)) - delay = msecs_to_jiffies(15000); + get_random_bytes(&rand, sizeof(rand)); rds_rtd(RDS_RTD_CM_EXT, "%lu delay %lu ceil conn %p for %pI4 -> %pI4 tos %d\n", - delay, cp->cp_reconnect_jiffies, + rand % cp->cp_reconnect_jiffies, cp->cp_reconnect_jiffies, conn, &conn->c_laddr, &conn->c_faddr, conn->c_tos); - queue_delayed_work(cp->cp_wq, &cp->cp_conn_w, delay); + queue_delayed_work(cp->cp_wq, &cp->cp_conn_w, + rand % cp->cp_reconnect_jiffies); + cp->cp_reconnect_jiffies = min(cp->cp_reconnect_jiffies * 2, rds_sysctl_reconnect_max_jiffies); } -- 2.50.1