]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
RDS: move more queing for loopback connections to separate queue
authorMukesh Kacker <mukesh.kacker@oracle.com>
Wed, 8 Oct 2014 20:11:14 +0000 (13:11 -0700)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Wed, 8 Jul 2015 21:00:09 +0000 (14:00 -0700)
All instances of processing for processing of
connect/re-connect/disconnect/reject instances in RDS
should use separate workqueue dedicated for processing
for (few) local loopback connections to reduce latency
so they do not get behind processing of large number of
remote connections.  However, a few instances of such
processing do not. With this fix those are being changed
to use the workqueue dedicated for local connections.

Orabug: 18977932

Signed-off-by: Mukesh Kacker <mukesh.kacker@oracle.com>
Acked-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Signed-off-by: Guangyu Sun <guangyu.sun@oracle.com>
(cherry picked from commit a0d407f186e0e4841bf1a24541dbcc0f0973726e)

net/rds/rdma_transport.c
net/rds/threads.c

index 7e3fc7526c5026fd6d0f4848f3508857a379c346..b48b5797e2901634e47e6f21c2e554a2fad57054 100644 (file)
@@ -242,10 +242,15 @@ int rds_rdma_cm_event_handler(struct rdma_cm_id *cm_id,
                                        conn->c_proposed_version =
                                                RDS_PROTOCOL_COMPAT_VERSION;
                                        rds_conn_drop(conn);
-                               } else {
-                                       queue_delayed_work(rds_wq,
-                                               &conn->c_reject_w,
-                                               msecs_to_jiffies(10));
+                               } else  {
+                                       if (conn->c_loopback)
+                                               queue_delayed_work(rds_local_wq,
+                                                       &conn->c_reject_w,
+                                                       msecs_to_jiffies(10));
+                                       else
+                                               queue_delayed_work(rds_wq,
+                                                       &conn->c_reject_w,
+                                                       msecs_to_jiffies(10));
                                }
                        } else
                                rds_conn_drop(conn);
index 41616b6260ecbbae863bffa98e1645719a87b4b6..13eff3b134e5afe4f0ad9746f1fff64c1de51527 100644 (file)
@@ -301,8 +301,12 @@ void rds_shutdown_worker(struct work_struct *work)
         */
        if (conn->c_laddr < conn->c_faddr && conn->c_reconnect_racing) {
                rds_conn_shutdown(conn, 0);
-               queue_delayed_work(rds_wq, &conn->c_reconn_w,
-                               msecs_to_jiffies(5000));
+               if (conn->c_loopback)
+                       queue_delayed_work(rds_local_wq, &conn->c_reconn_w,
+                                          msecs_to_jiffies(5000));
+               else
+                       queue_delayed_work(rds_wq, &conn->c_reconn_w,
+                                          msecs_to_jiffies(5000));
        } else
                rds_conn_shutdown(conn, 1);