]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
rds: add infrastructure to find more details for reconnect failure
authorAjaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Fri, 4 Mar 2016 03:23:05 +0000 (19:23 -0800)
committerChuck Anderson <chuck.anderson@oracle.com>
Thu, 10 Mar 2016 20:11:00 +0000 (12:11 -0800)
This patch adds run-time support to debug scenarios where reconnect is
not successful for certain time.
We add two sysctl variables for start time and end time. These are
number of seconds after reconnect was initiated.

Orabug: 22631108

Signed-off-by: Ajaykumar Hotchandani <ajaykumar.hotchandani@oracle.com>
Acked-by: Wengang Wang <wen.gang.wang@oracle.com>
Reviewed-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
net/rds/rds.h
net/rds/sysctl.c
net/rds/threads.c

index f01c043eb07dde0f69853a798a4ccb447c2d1906..e9e81a814dd4240795819f3e3d10beee4a359b19 100644 (file)
@@ -906,6 +906,8 @@ extern unsigned int  rds_sysctl_max_unacked_bytes;
 extern unsigned int  rds_sysctl_ping_enable;
 extern unsigned long rds_sysctl_trace_flags;
 extern unsigned int  rds_sysctl_trace_level;
+extern unsigned int  rds_sysctl_shutdown_trace_start_time;
+extern unsigned int  rds_sysctl_shutdown_trace_end_time;
 
 /* threads.c */
 int rds_threads_init(void);
index 05cba38afb6f19a5bd1a65eca7b2387eccd1c432..b22e8b8b6b89dd48ba5674b4acd5113b64292998 100644 (file)
@@ -49,6 +49,9 @@ unsigned int  rds_sysctl_max_unacked_bytes = (16 << 20);
 
 unsigned int rds_sysctl_ping_enable = 1;
 
+unsigned int rds_sysctl_shutdown_trace_start_time;
+unsigned int rds_sysctl_shutdown_trace_end_time;
+
 /*
  * We have official values, but must maintain the sysctl interface for existing
  * software that expects to find these values here.
@@ -110,6 +113,20 @@ static struct ctl_table rds_sysctl_rds_table[] = {
                .mode           = 0644,
                .proc_handler   = proc_dointvec,
        },
+       {
+               .procname       = "shutdown_trace_start_time",
+               .data           = &rds_sysctl_shutdown_trace_start_time,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = &proc_dointvec,
+       },
+       {
+               .procname       = "shutdown_trace_end_time",
+               .data           = &rds_sysctl_shutdown_trace_end_time,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = &proc_dointvec,
+       },
        { }
 };
 
index 0de85acd49c9f723c31a333a869f8f8152e4fea0..82b6f3e906ae18593e22e19622dccb9e8e9d5708 100644 (file)
@@ -313,7 +313,16 @@ void rds_reconnect_timeout(struct work_struct *work)
 void rds_shutdown_worker(struct work_struct *work)
 {
        struct rds_connection *conn = container_of(work, struct rds_connection, c_down_w);
+       unsigned long now = get_seconds();
 
+       if ((now - conn->c_reconnect_start > rds_sysctl_shutdown_trace_start_time) &&
+           (now - conn->c_reconnect_start < rds_sysctl_shutdown_trace_end_time))
+               pr_info("RDS/IB: connection <%u.%u.%u.%u,%u.%u.%u.%u,%d> "
+                               "shutdown init due to '%s'\n",
+                               NIPQUAD(conn->c_laddr),
+                               NIPQUAD(conn->c_faddr),
+                               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)