Skip to content

Commit 10573d6

Browse files
Wei Lin GuaySomasundaram Krishnasamy
authored andcommitted
Revert "net/rds: prioritize the base connection establishment"
This reverts commit 1bc87d2 ("net/rds: prioritize the base connection establishment"). This patch is reverted because the RDS path record caching is replaced by the underlying ibacm path record caching. By doing so, all the TOS connections can be established without depending on its base connection to perform SA query. Thus, it is not required to prioritize the base connection establishment. Orabug: 26497333 Signed-off-by: Wei Lin Guay <[email protected]> Reviewed-by: Håkon Bugge <[email protected]> Reviewed-by: Avinash Repaka <[email protected]> Reviewed-by: Ajaykumar Hotchandani <[email protected]> Orabug: 27364391 (cherry picked from commit d5c9b79) cherry-pick-repo=linux-uek.git Conflicts: net/rds/connection.c Signed-off-by: Gerd Rausch <[email protected]> Signed-off-by: Somasundaram Krishnasamy <[email protected]>
1 parent 8c0c148 commit 10573d6

File tree

4 files changed

+12
-39
lines changed

4 files changed

+12
-39
lines changed

net/rds/connection.c

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ static void __rds_conn_path_init(struct rds_connection *conn,
159159
INIT_DELAYED_WORK(&cp->cp_hb_w, rds_hb_worker);
160160
INIT_DELAYED_WORK(&cp->cp_reconn_w, rds_reconnect_timeout);
161161
INIT_DELAYED_WORK(&cp->cp_reject_w, rds_reject_worker);
162-
INIT_DELAYED_WORK(&cp->cp_down_w, rds_shutdown_worker);
162+
INIT_WORK(&cp->cp_down_w, rds_shutdown_worker);
163163
mutex_init(&cp->cp_cm_lock);
164164
cp->cp_flags = 0;
165165
}
@@ -434,7 +434,7 @@ void rds_conn_shutdown(struct rds_conn_path *cp, int restart)
434434
rcu_read_lock();
435435
if (!hlist_unhashed(&conn->c_hash_node) && restart) {
436436
rcu_read_unlock();
437-
rds_queue_reconnect(cp, DR_DEFAULT);
437+
rds_queue_reconnect(cp);
438438
} else {
439439
rcu_read_unlock();
440440
}
@@ -455,7 +455,7 @@ static void rds_conn_path_destroy(struct rds_conn_path *cp, int shutdown)
455455
return;
456456

457457
rds_conn_path_drop(cp, DR_CONN_DESTROY);
458-
flush_delayed_work(&cp->cp_down_w);
458+
flush_work(&cp->cp_down_w);
459459

460460
/* now that conn down worker is flushed; there cannot be any
461461
* more posting of reconn timeout work. But cancel any already
@@ -871,7 +871,6 @@ void rds_conn_path_drop(struct rds_conn_path *cp, int reason)
871871
unsigned long now = get_seconds();
872872
struct rds_connection *conn = cp->cp_conn;
873873

874-
unsigned long delay = 0;
875874
cp->cp_drop_source = reason;
876875
if (rds_conn_path_state(cp) == RDS_CONN_UP) {
877876
cp->cp_reconnect_start = now;
@@ -911,16 +910,13 @@ void rds_conn_path_drop(struct rds_conn_path *cp, int reason)
911910

912911
atomic_set(&cp->cp_state, RDS_CONN_ERROR);
913912

914-
if ((conn->c_tos && reason == DR_IB_ADDR_CHANGE) ||
915-
reason == DR_IB_BASE_CONN_DOWN)
916-
delay = msecs_to_jiffies(100);
917913
rds_rtd(RDS_RTD_CM_EXT,
918914
"RDS/%s: queueing shutdown work, conn %p, <%pI4,%pI4,%d>\n",
919915
conn->c_trans->t_type == RDS_TRANS_TCP ? "TCP" : "IB",
920916
conn, &conn->c_laddr, &conn->c_faddr,
921917
conn->c_tos);
922918

923-
queue_delayed_work(cp->cp_wq, &cp->cp_down_w, delay);
919+
queue_work(cp->cp_wq, &cp->cp_down_w);
924920
}
925921
EXPORT_SYMBOL_GPL(rds_conn_path_drop);
926922

@@ -941,18 +937,11 @@ void rds_conn_path_connect_if_down(struct rds_conn_path *cp)
941937

942938
if (rds_conn_path_state(cp) == RDS_CONN_DOWN &&
943939
!test_and_set_bit(RDS_RECONNECT_PENDING, &cp->cp_flags)) {
944-
if (conn->c_tos == 0 ||
945-
(conn->c_tos && rds_conn_state(cp->cp_base_conn) == RDS_CONN_UP)) {
946940
rds_rtd(RDS_RTD_CM_EXT,
947941
"queueing connect work, conn %p, <%pI4,%pI4,%d>\n",
948942
conn, &conn->c_laddr, &conn->c_faddr,
949943
conn->c_tos);
950944
queue_delayed_work(cp->cp_wq, &cp->cp_conn_w, 0);
951-
} else
952-
rds_rtd(RDS_RTD_CM_EXT,
953-
"skip, base conn %p down, conn %p, <%pI4,%pI4,%d>\n",
954-
cp->cp_base_conn, conn, &conn->c_laddr,
955-
&conn->c_faddr, conn->c_tos);
956945
}
957946
}
958947
EXPORT_SYMBOL_GPL(rds_conn_path_connect_if_down);

net/rds/ib_cm.c

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,24 +1144,9 @@ int rds_ib_conn_path_connect(struct rds_conn_path *cp)
11441144
struct rds_connection *conn = cp->cp_conn;
11451145
struct rds_ib_connection *ic = conn->c_transport_data;
11461146
struct sockaddr_in src, dest;
1147-
int ret = 0;
1147+
int ret;
11481148

11491149
conn->c_route_resolved = 0;
1150-
1151-
if (conn->c_tos) {
1152-
mutex_lock(&conn->c_base_conn->c_cm_lock);
1153-
if (!rds_conn_transition(conn->c_base_conn, RDS_CONN_UP,
1154-
RDS_CONN_UP)) {
1155-
rds_rtd(RDS_RTD_CM_EXT,
1156-
"RDS/IB: base conn %p (%p) is not up\n",
1157-
conn->c_base_conn, conn);
1158-
ret = DR_IB_BASE_CONN_DOWN;
1159-
}
1160-
mutex_unlock(&conn->c_base_conn->c_cm_lock);
1161-
if (ret)
1162-
goto out;
1163-
}
1164-
11651150
/* XXX I wonder what affect the port space has */
11661151
/* delegate cm event handler to rdma_transport */
11671152
ic->i_cm_id = rdma_create_id(rds_conn_net(conn),

net/rds/rds.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ struct rds_conn_path {
254254
struct delayed_work cp_reject_w;
255255
struct delayed_work cp_hb_w;
256256
struct delayed_work cp_reconn_w;
257-
struct delayed_work cp_down_w;
257+
struct work_struct cp_down_w;
258258
struct mutex cp_cm_lock; /* protect cp_state & cm */
259259
wait_queue_head_t cp_waitq;
260260

@@ -1142,7 +1142,7 @@ int rds_threads_init(void);
11421142
void rds_threads_exit(void);
11431143
extern struct workqueue_struct *rds_wq;
11441144
extern struct workqueue_struct *rds_local_wq;
1145-
void rds_queue_reconnect(struct rds_conn_path *cp, int reason);
1145+
void rds_queue_reconnect(struct rds_conn_path *cp);
11461146
void rds_connect_worker(struct work_struct *);
11471147
void rds_shutdown_worker(struct work_struct *);
11481148
void rds_send_worker(struct work_struct *);

net/rds/threads.c

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,16 +130,16 @@ EXPORT_SYMBOL_GPL(rds_connect_complete);
130130
* We should *always* start with a random backoff; otherwise a broken connection
131131
* will always take several iterations to be re-established.
132132
*/
133-
void rds_queue_reconnect(struct rds_conn_path *cp, int reason)
133+
void rds_queue_reconnect(struct rds_conn_path *cp)
134134
{
135135
unsigned long rand;
136136
struct rds_connection *conn = cp->cp_conn;
137137
bool is_tcp = conn->c_trans->t_type == RDS_TRANS_TCP;
138138

139139
rds_rtd(RDS_RTD_CM_EXT,
140-
"conn %p for %pI4 to %pI4 tos %d reconnect jiffies %lu %s\n", conn,
140+
"conn %p for %pI4 to %pI4 tos %d reconnect jiffies %lu\n", conn,
141141
&conn->c_laddr, &conn->c_faddr, conn->c_tos,
142-
cp->cp_reconnect_jiffies, conn_drop_reason_str(reason));
142+
cp->cp_reconnect_jiffies);
143143

144144
/* let peer with smaller addr initiate reconnect, to avoid duels */
145145
if (is_tcp && !IS_CANONICAL(conn->c_laddr, conn->c_faddr))
@@ -198,8 +198,7 @@ void rds_connect_worker(struct work_struct *work)
198198
RDS_CONN_DOWN)) {
199199
rds_rtd(RDS_RTD_CM_EXT,
200200
"reconnecting..., conn %p\n", conn);
201-
rds_queue_reconnect(cp, ret == DR_IB_BASE_CONN_DOWN ?
202-
DR_IB_BASE_CONN_DOWN : DR_DEFAULT);
201+
rds_queue_reconnect(cp);
203202
} else {
204203
rds_conn_path_drop(cp, DR_CONN_CONNECT_FAIL);
205204
}
@@ -330,7 +329,7 @@ void rds_shutdown_worker(struct work_struct *work)
330329
{
331330
struct rds_conn_path *cp = container_of(work,
332331
struct rds_conn_path,
333-
cp_down_w.work);
332+
cp_down_w);
334333
unsigned long now = get_seconds();
335334
bool is_tcp = cp->cp_conn->c_trans->t_type == RDS_TRANS_TCP;
336335
struct rds_connection *conn = cp->cp_conn;

0 commit comments

Comments
 (0)