Skip to content

Commit 04bae38

Browse files
SantoshShilimkarSomasundaram Krishnasamy
authored andcommitted
RDS: make the rds_{local_}wq part of rds_connection
Instead of sprinkling if/else for loopback all over the place, lets just add c_wq as part of rds_connection. This will prevent missing cases like 'commit edca33b ("RDS: move more queing for loopback connections to separate queue"), 'commit 8502173 ("rds: schedule local connection activity in proper workqueue") or any future changes. Orabug: 22347191 Signed-off-by: Santosh Shilimkar <[email protected]> Reviewed-by: Mukesh Kacker <[email protected]> Tested-by: Michael Nowak <[email protected]> Tested-by: Rafael Alejandro Peralez <[email protected]> Tested-by: Liwen Huang <[email protected]> Tested-by: Hong Liu <[email protected]> Orabug: 27364391 (cherry picked from commit 8935c8f) cherry-pick-repo=linux-uek.git Signed-off-by: Gerd Rausch <[email protected]> Signed-off-by: Somasundaram Krishnasamy <[email protected]>
1 parent eeff533 commit 04bae38

File tree

4 files changed

+19
-43
lines changed

4 files changed

+19
-43
lines changed

net/rds/connection.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,10 @@ static struct rds_connection *__rds_conn_create(struct net *net,
215215
}
216216

217217
conn->c_trans = trans;
218+
if (conn->c_loopback)
219+
conn->c_wq = rds_local_wq;
220+
else
221+
conn->c_wq = rds_wq;
218222

219223
ret = trans->conn_alloc(conn, gfp);
220224
if (ret) {
@@ -781,11 +785,7 @@ void rds_conn_drop(struct rds_connection *conn, int reason)
781785
conn, &conn->c_laddr, &conn->c_faddr,
782786
conn->c_tos);
783787

784-
if (conn->c_loopback)
785-
queue_work(rds_local_wq, &conn->c_down_w);
786-
else
787-
queue_work(rds_wq, &conn->c_down_w);
788-
788+
queue_work(conn->c_wq, &conn->c_down_w);
789789
}
790790
EXPORT_SYMBOL_GPL(rds_conn_drop);
791791

@@ -801,10 +801,7 @@ void rds_conn_connect_if_down(struct rds_connection *conn)
801801
"queueing connect work, conn %p, <%pI4,%pI4,%d>\n",
802802
conn, &conn->c_laddr, &conn->c_faddr,
803803
conn->c_tos);
804-
if (conn->c_loopback)
805-
queue_delayed_work(rds_local_wq, &conn->c_conn_w, 0);
806-
else
807-
queue_delayed_work(rds_wq, &conn->c_conn_w, 0);
804+
queue_delayed_work(conn->c_wq, &conn->c_conn_w, 0);
808805
}
809806
}
810807
EXPORT_SYMBOL_GPL(rds_conn_connect_if_down);

net/rds/rdma_transport.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -273,14 +273,9 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
273273
rds_conn_drop(conn,
274274
DR_IB_CONSUMER_DEFINED_REJ);
275275
} else {
276-
if (conn->c_loopback)
277-
queue_delayed_work(rds_local_wq,
278-
&conn->c_reject_w,
279-
msecs_to_jiffies(10));
280-
else
281-
queue_delayed_work(rds_wq,
282-
&conn->c_reject_w,
283-
msecs_to_jiffies(10));
276+
queue_delayed_work(conn->c_wq,
277+
&conn->c_reject_w,
278+
msecs_to_jiffies(10));
284279
}
285280
} else if (event->status == RDS_REJ_CONSUMER_DEFINED &&
286281
(*err) == RDS_ACL_FAILURE) {

net/rds/rds.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ struct rds_connection {
245245
struct rds_transport *c_trans;
246246
void *c_transport_data;
247247

248+
struct workqueue_struct *c_wq;
248249
atomic_t c_state;
249250
unsigned long c_send_gen;
250251
unsigned long c_flags;

net/rds/threads.c

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,7 @@ void rds_connect_path_complete(struct rds_connection *conn, int curr)
8585
__func__,
8686
atomic_read(&conn->c_state));
8787
atomic_set(&conn->c_state, RDS_CONN_ERROR);
88-
if (conn->c_loopback)
89-
queue_work(rds_local_wq, &conn->c_down_w);
90-
else
91-
queue_work(rds_wq, &conn->c_down_w);
88+
queue_work(conn->c_wq, &conn->c_down_w);
9289
return;
9390
}
9491

@@ -145,10 +142,7 @@ void rds_queue_reconnect(struct rds_connection *conn)
145142
set_bit(RDS_RECONNECT_PENDING, &conn->c_flags);
146143
if (conn->c_reconnect_jiffies == 0) {
147144
conn->c_reconnect_jiffies = rds_sysctl_reconnect_min_jiffies;
148-
if (conn->c_loopback)
149-
queue_delayed_work(rds_local_wq, &conn->c_conn_w, 0);
150-
else
151-
queue_delayed_work(rds_wq, &conn->c_conn_w, 0);
145+
queue_delayed_work(conn->c_wq, &conn->c_conn_w, 0);
152146
return;
153147
}
154148

@@ -158,19 +152,12 @@ void rds_queue_reconnect(struct rds_connection *conn)
158152
rand % conn->c_reconnect_jiffies, conn->c_reconnect_jiffies,
159153
conn, &conn->c_laddr, &conn->c_faddr, conn->c_tos);
160154

161-
if (conn->c_loopback) {
162-
if (conn->c_laddr >= conn->c_faddr)
163-
queue_delayed_work(rds_local_wq, &conn->c_conn_w,
164-
rand % conn->c_reconnect_jiffies);
165-
else
166-
queue_delayed_work(rds_local_wq, &conn->c_conn_w,
167-
msecs_to_jiffies(100));
168-
} else if (conn->c_laddr >= conn->c_faddr)
169-
queue_delayed_work(rds_wq, &conn->c_conn_w,
170-
rand % conn->c_reconnect_jiffies);
155+
if (conn->c_laddr >= conn->c_faddr)
156+
queue_delayed_work(conn->c_wq, &conn->c_conn_w,
157+
rand % conn->c_reconnect_jiffies);
171158
else
172-
queue_delayed_work(rds_wq, &conn->c_conn_w,
173-
msecs_to_jiffies(100));
159+
queue_delayed_work(conn->c_wq, &conn->c_conn_w,
160+
msecs_to_jiffies(100));
174161

175162
conn->c_reconnect_jiffies = min(conn->c_reconnect_jiffies * 2,
176163
rds_sysctl_reconnect_max_jiffies);
@@ -339,12 +326,8 @@ void rds_shutdown_worker(struct work_struct *work)
339326
conn, &conn->c_laddr, &conn->c_faddr,
340327
conn->c_tos);
341328
rds_conn_shutdown(conn, 0);
342-
if (conn->c_loopback)
343-
queue_delayed_work(rds_local_wq, &conn->c_reconn_w,
344-
msecs_to_jiffies(5000));
345-
else
346-
queue_delayed_work(rds_wq, &conn->c_reconn_w,
347-
msecs_to_jiffies(5000));
329+
queue_delayed_work(conn->c_wq, &conn->c_reconn_w,
330+
msecs_to_jiffies(5000));
348331
} else {
349332
rds_rtd(RDS_RTD_CM,
350333
"calling rds_conn_shutdown, conn %p:1 <%pI4,%pI4,%d>\n",

0 commit comments

Comments
 (0)