From 812c02791add650abb421388593353ba1ea85887 Mon Sep 17 00:00:00 2001 From: Santosh Shilimkar Date: Thu, 15 Sep 2016 14:50:17 -0700 Subject: [PATCH] RDS: restore the exponential back-off scheme Lower IP and exponential back-off scheme was added to save the SM queries because of races but it doesn't do what its intended. The exponential back-off scheme does a good job of backing off for races. The code just falls back to the original scheme. Orabug: 22347191 Tested-by: Michael Nowak Tested-by: Rafael Alejandro Peralez Tested-by: Liwen Huang Tested-by: Hong Liu Reviewed-by: Mukesh Kacker Signed-off-by: Santosh Shilimkar --- net/rds/connection.c | 1 - net/rds/ib_cm.c | 2 -- net/rds/rdma_transport.c | 4 ---- net/rds/rds.h | 1 - net/rds/threads.c | 25 +------------------------ 5 files changed, 1 insertion(+), 32 deletions(-) diff --git a/net/rds/connection.c b/net/rds/connection.c index 5a55cd83ac00..241df31bedab 100644 --- a/net/rds/connection.c +++ b/net/rds/connection.c @@ -750,7 +750,6 @@ void rds_conn_drop(struct rds_connection *conn, int reason) conn->c_reconnect_warn = 1; conn->c_reconnect_drops = 0; conn->c_reconnect_err = 0; - conn->c_reconnect_racing = 0; printk(KERN_INFO "RDS/IB: connection " "<%u.%u.%u.%u,%u.%u.%u.%u,%d> dropped due to '%s'\n", NIPQUAD(conn->c_laddr), diff --git a/net/rds/ib_cm.c b/net/rds/ib_cm.c index 7422d3cc2ed7..8ea47b6af17a 100644 --- a/net/rds/ib_cm.c +++ b/net/rds/ib_cm.c @@ -915,8 +915,6 @@ int rds_ib_cm_handle_connect(struct rdma_cm_id *cm_id, } else if (rds_conn_state(conn) == RDS_CONN_CONNECTING) { unsigned long now = get_seconds(); - conn->c_reconnect_racing++; - /* * after 15 seconds, give up on existing connection * attempts and make them try again. At this point diff --git a/net/rds/rdma_transport.c b/net/rds/rdma_transport.c index 078b99bdf2d2..6e1c49d059bf 100644 --- a/net/rds/rdma_transport.c +++ b/net/rds/rdma_transport.c @@ -258,10 +258,6 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id, case RDMA_CM_EVENT_REJECTED: err = (int *)event->param.conn.private_data; - if (conn && event->status == RDS_REJ_CONSUMER_DEFINED && - *err <= 1) - conn->c_reconnect_racing++; - if (conn) { if (event->status == RDS_REJ_CONSUMER_DEFINED && (*err) == 0) { diff --git a/net/rds/rds.h b/net/rds/rds.h index 8645c10cf4de..81e20b0252ba 100644 --- a/net/rds/rds.h +++ b/net/rds/rds.h @@ -293,7 +293,6 @@ struct rds_connection { unsigned int c_rdsinfo_pending; - unsigned int c_reconnect_racing; unsigned int c_route_resolved; enum rds_conn_drop_src c_drop_source; diff --git a/net/rds/threads.c b/net/rds/threads.c index 04e9127a1dbb..38b5ee2c8b98 100644 --- a/net/rds/threads.c +++ b/net/rds/threads.c @@ -150,12 +150,8 @@ void rds_queue_reconnect(struct rds_connection *conn) rand % conn->c_reconnect_jiffies, conn->c_reconnect_jiffies, conn, &conn->c_laddr, &conn->c_faddr, conn->c_tos); - if (conn->c_laddr >= conn->c_faddr) queue_delayed_work(conn->c_wq, &conn->c_conn_w, rand % conn->c_reconnect_jiffies); - else - queue_delayed_work(conn->c_wq, &conn->c_conn_w, - msecs_to_jiffies(100)); conn->c_reconnect_jiffies = min(conn->c_reconnect_jiffies * 2, rds_sysctl_reconnect_max_jiffies); @@ -297,7 +293,6 @@ void rds_reconnect_timeout(struct work_struct *work) NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr), conn->c_tos); rds_conn_drop(conn, DR_RECONNECT_TIMEOUT); - conn->c_reconnect_racing = 0; } } @@ -315,25 +310,7 @@ void rds_shutdown_worker(struct work_struct *work) conn->c_tos, conn_drop_reason_str(conn->c_drop_source)); - /* if racing is detected, lower IP backs off and let the higher IP - * drives the reconnect (one-sided reconnect) - */ - if (conn->c_laddr < conn->c_faddr && conn->c_reconnect_racing) { - rds_rtd(RDS_RTD_CM, - "calling rds_conn_shutdown, conn %p:0 <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n", - conn, NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr), - conn->c_tos); - rds_conn_shutdown(conn, 0); - queue_delayed_work(conn->c_wq, &conn->c_reconn_w, - msecs_to_jiffies(5000)); - } else { - rds_rtd(RDS_RTD_CM, - "calling rds_conn_shutdown, conn %p:1 <%u.%u.%u.%u,%u.%u.%u.%u,%d>\n", - conn, NIPQUAD(conn->c_laddr), NIPQUAD(conn->c_faddr), - conn->c_tos); - rds_conn_shutdown(conn, 1); - } - + rds_conn_shutdown(conn, 1); } void rds_threads_exit(void) -- 2.50.1