Thread (13 messages) 13 messages, 2 authors, 2024-03-16

Re: [PATCH 11/11] sysctl: treewide: constify the ctl_table argument of handlers

From: Dave Chinner <david@fromorbit.com>
Date: 2024-03-16 02:52:53
Also in: bpf, bridge, kexec, linux-fsdevel, linux-hardening, linux-mm, linux-nfs, linux-perf-users, linux-rdma, linux-riscv, linux-s390, linux-sctp, linux-security-module, linux-trace-kernel, linux-xfs, lkml, lvs-devel, netdev, netfilter-devel

On Fri, Mar 15, 2024 at 09:48:09PM +0100, Thomas Weißschuh wrote:
Adapt the proc_hander function signature to make it clear that handlers
are not supposed to modify their ctl_table argument.

This is a prerequisite to moving the static ctl_table structs into
.rodata.
By migrating all handlers at once a lengthy transition can be avoided.

The patch was mostly generated by coccinelle with the following script:

    @@
    identifier func, ctl, write, buffer, lenp, ppos;
    @@

    int func(
    - struct ctl_table *ctl,
    + const struct ctl_table *ctl,
      int write, void *buffer, size_t *lenp, loff_t *ppos)
    { ... }
Which seems to have screwed up the formatting of the XFS code...
quoted hunk ↗ jump to hunk
diff --git a/fs/xfs/xfs_sysctl.c b/fs/xfs/xfs_sysctl.c
index a191f6560f98..a3ca192eca79 100644
--- a/fs/xfs/xfs_sysctl.c
+++ b/fs/xfs/xfs_sysctl.c
@@ -10,12 +10,11 @@ static struct ctl_table_header *xfs_table_header;
 
 #ifdef CONFIG_PROC_FS
 STATIC int
-xfs_stats_clear_proc_handler(
-	struct ctl_table	*ctl,
-	int			write,
-	void			*buffer,
-	size_t			*lenp,
-	loff_t			*ppos)
+xfs_stats_clear_proc_handler(const struct ctl_table *ctl,
+			     int			write,
+			     void			*buffer,
+			     size_t			*lenp,
+			     loff_t			*ppos)
... because this doesn't match any format I've ever seen in the
kernel. The diff for this change shold be just:
@@ -10,7 +10,7 @@ static struct ctl_table_header *xfs_table_header;
 #ifdef CONFIG_PROC_FS
 STATIC int
 xfs_stats_clear_proc_handler(
-	struct ctl_table	*ctl,
+	const struct ctl_table	*ctl,
 	int			write,
 	void			*buffer,
 	size_t			*lenp,
quoted hunk ↗ jump to hunk
 {
 	int		ret, *valp = ctl->data;
 
@@ -30,12 +29,11 @@ xfs_stats_clear_proc_handler(
 }
 
 STATIC int
-xfs_panic_mask_proc_handler(
-	struct ctl_table	*ctl,
-	int			write,
-	void			*buffer,
-	size_t			*lenp,
-	loff_t			*ppos)
+xfs_panic_mask_proc_handler(const struct ctl_table *ctl,
+			    int			write,
+			    void			*buffer,
+			    size_t			*lenp,
+			    loff_t			*ppos)
 {
 	int		ret, *valp = ctl->data;
 
@@ -51,12 +49,11 @@ xfs_panic_mask_proc_handler(
 #endif /* CONFIG_PROC_FS */
 
 STATIC int
-xfs_deprecated_dointvec_minmax(
-	struct ctl_table	*ctl,
-	int			write,
-	void			*buffer,
-	size_t			*lenp,
-	loff_t			*ppos)
+xfs_deprecated_dointvec_minmax(const struct ctl_table *ctl,
+			       int			write,
+			       void			*buffer,
+			       size_t			*lenp,
+			       loff_t			*ppos)
 {
 	if (write) {
 		printk_ratelimited(KERN_WARNING
And these need fixing as well.

A further quick glance at the patch reveals that there are other
similar screwed up conversions as well.
quoted hunk ↗ jump to hunk
diff --git a/kernel/delayacct.c b/kernel/delayacct.c
index 6f0c358e73d8..513791ef573d 100644
--- a/kernel/delayacct.c
+++ b/kernel/delayacct.c
@@ -44,8 +44,9 @@ void delayacct_init(void)
 }
 
 #ifdef CONFIG_PROC_SYSCTL
-static int sysctl_delayacct(struct ctl_table *table, int write, void *buffer,
-		     size_t *lenp, loff_t *ppos)
+static int sysctl_delayacct(const struct ctl_table *table, int write,
+			    void *buffer,
+			    size_t *lenp, loff_t *ppos)
 {
 	int state = delayacct_on;
 	struct ctl_table t;
Like this.
quoted hunk ↗ jump to hunk
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 724e6d7e128f..e2955e0d9f44 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -450,7 +450,8 @@ static void update_perf_cpu_limits(void)
 
 static bool perf_rotate_context(struct perf_cpu_pmu_context *cpc);
 
-int perf_event_max_sample_rate_handler(struct ctl_table *table, int write,
+int perf_event_max_sample_rate_handler(const struct ctl_table *table,
+				       int write,
 				       void *buffer, size_t *lenp, loff_t *ppos)
 {
 	int ret;
And this.
quoted hunk ↗ jump to hunk
@@ -474,8 +475,10 @@ int perf_event_max_sample_rate_handler(struct ctl_table *table, int write,
 
 int sysctl_perf_cpu_time_max_percent __read_mostly = DEFAULT_CPU_TIME_MAX_PERCENT;
 
-int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
-		void *buffer, size_t *lenp, loff_t *ppos)
+int perf_cpu_time_max_percent_handler(const struct ctl_table *table,
+				      int write,
+				      void *buffer, size_t *lenp,
+				      loff_t *ppos)
 {
 	int ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
 
And this.
quoted hunk ↗ jump to hunk
diff --git a/kernel/hung_task.c b/kernel/hung_task.c
index b2fc2727d654..003f0f5cb111 100644
--- a/kernel/hung_task.c
+++ b/kernel/hung_task.c
@@ -239,9 +239,10 @@ static long hung_timeout_jiffies(unsigned long last_checked,
 /*
  * Process updating of timeout sysctl
  */
-static int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
-				  void *buffer,
-				  size_t *lenp, loff_t *ppos)
+static int proc_dohung_task_timeout_secs(const struct ctl_table *table,
+					 int write,
+					 void *buffer,
+					 size_t *lenp, loff_t *ppos)
 {
 	int ret;
 
And this.
quoted hunk ↗ jump to hunk
diff --git a/kernel/latencytop.c b/kernel/latencytop.c
index 781249098cb6..0a5c22b19821 100644
--- a/kernel/latencytop.c
+++ b/kernel/latencytop.c
@@ -65,8 +65,9 @@ static struct latency_record latency_record[MAXLR];
 int latencytop_enabled;
 
 #ifdef CONFIG_SYSCTL
-static int sysctl_latencytop(struct ctl_table *table, int write, void *buffer,
-		size_t *lenp, loff_t *ppos)
+static int sysctl_latencytop(const struct ctl_table *table, int write,
+			     void *buffer,
+			     size_t *lenp, loff_t *ppos)
 {
 	int err;
 
And this.

I could go on, but there are so many examples of this in the patch
that I think that it needs to be toosed away and regenerated in a
way that doesn't trash the existing function parameter formatting.

-Dave.
-- 
Dave Chinner
david@fromorbit.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help