From: Wen Yang Refresh reconnect bounds while preserving jiffies conversion. Suggested-by: Joel Granados Signed-off-by: Wen Yang --- net/rds/sysctl.c | 32 +++++++++++++++++++++++++------- net/rds/tcp.c | 11 +++++------ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/net/rds/sysctl.c b/net/rds/sysctl.c index 025f518a4349..b32213b8ad96 100644 --- a/net/rds/sysctl.c +++ b/net/rds/sysctl.c @@ -39,7 +39,6 @@ static struct ctl_table_header *rds_sysctl_reg_table; static unsigned long rds_sysctl_reconnect_min = 1; -static unsigned long rds_sysctl_reconnect_max = ~0UL; unsigned long rds_sysctl_reconnect_min_jiffies; unsigned long rds_sysctl_reconnect_max_jiffies = HZ; @@ -49,24 +48,43 @@ unsigned int rds_sysctl_max_unacked_bytes = (16 << 20); unsigned int rds_sysctl_ping_enable = 1; +static int rds_reconnect_min_handler(const struct ctl_table *table, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table tmp = *table; + + tmp.min = READ_ONCE(rds_sysctl_reconnect_min); + tmp.max = READ_ONCE(rds_sysctl_reconnect_max_jiffies); + return proc_doulongvec_ms_jiffies_minmax(&tmp, write, buffer, lenp, ppos); +} + +static int rds_reconnect_max_handler(const struct ctl_table *table, int write, + void *buffer, size_t *lenp, loff_t *ppos) +{ + struct ctl_table tmp = *table; + + tmp.min = READ_ONCE(rds_sysctl_reconnect_min_jiffies); + return proc_doulongvec_ms_jiffies_minmax(&tmp, write, buffer, lenp, ppos); +} + static struct ctl_table rds_sysctl_rds_table[] = { { .procname = "reconnect_min_delay_ms", .data = &rds_sysctl_reconnect_min_jiffies, .maxlen = sizeof(unsigned long), .mode = 0644, - .proc_handler = proc_doulongvec_ms_jiffies_minmax, - .extra1 = &rds_sysctl_reconnect_min, - .extra2 = &rds_sysctl_reconnect_max_jiffies, + .proc_handler = rds_reconnect_min_handler, + .min = 0, + .max = ULONG_MAX, }, { .procname = "reconnect_max_delay_ms", .data = &rds_sysctl_reconnect_max_jiffies, .maxlen = sizeof(unsigned long), .mode = 0644, - .proc_handler = proc_doulongvec_ms_jiffies_minmax, - .extra1 = &rds_sysctl_reconnect_min_jiffies, - .extra2 = &rds_sysctl_reconnect_max, + .proc_handler = rds_reconnect_max_handler, + .min = 0, + .max = ULONG_MAX, }, { .procname = "max_unacked_packets", diff --git a/net/rds/tcp.c b/net/rds/tcp.c index 774a71f88d37..4c1d1c3696b2 100644 --- a/net/rds/tcp.c +++ b/net/rds/tcp.c @@ -58,9 +58,6 @@ static int rds_tcp_sndbuf_handler(const struct ctl_table *ctl, int write, static int rds_tcp_rcvbuf_handler(const struct ctl_table *ctl, int write, void *buffer, size_t *lenp, loff_t *fpos); -static int rds_tcp_min_sndbuf = SOCK_MIN_SNDBUF; -static int rds_tcp_min_rcvbuf = SOCK_MIN_RCVBUF; - static struct ctl_table rds_tcp_sysctl_table[] = { #define RDS_TCP_SNDBUF 0 { @@ -69,7 +66,8 @@ static struct ctl_table rds_tcp_sysctl_table[] = { .maxlen = sizeof(int), .mode = 0644, .proc_handler = rds_tcp_sndbuf_handler, - .extra1 = &rds_tcp_min_sndbuf, + .min = SOCK_MIN_SNDBUF, + .max = INT_MAX, }, #define RDS_TCP_RCVBUF 1 { @@ -78,7 +76,8 @@ static struct ctl_table rds_tcp_sysctl_table[] = { .maxlen = sizeof(int), .mode = 0644, .proc_handler = rds_tcp_rcvbuf_handler, - .extra1 = &rds_tcp_min_rcvbuf, + .min = SOCK_MIN_RCVBUF, + .max = INT_MAX, }, }; @@ -764,7 +763,7 @@ static int rds_tcp_skbuf_handler(struct rds_tcp_net *rtn, err = proc_dointvec_minmax(ctl, write, buffer, lenp, fpos); if (err < 0) { pr_warn("Invalid input. Must be >= %d\n", - *(int *)(ctl->extra1)); + (int)ctl->min); return err; } -- 2.25.1