[RFC PATCH 26/39] rds: preserve live reconnect limits with numeric bounds
From: wen . yang
Date: Wed Oct 28 2026 - 12:41:25 EST
From: Wen Yang <wen.yang@xxxxxxxxx>
Refresh reconnect bounds while preserving jiffies conversion.
Suggested-by: Joel Granados <joel.granados@xxxxxxxxxx>
Signed-off-by: Wen Yang <wen.yang@xxxxxxxxx>
---
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