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>
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);
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.
.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,
+ },
{ }
};
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)