aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config/kernel-register_sysctl_table.m433
-rw-r--r--config/kernel.m42
-rw-r--r--module/os/linux/spl/spl-proc.c12
3 files changed, 44 insertions, 3 deletions
diff --git a/config/kernel-register_sysctl_table.m4 b/config/kernel-register_sysctl_table.m4
index a5e934f56..b8a0e0b17 100644
--- a/config/kernel-register_sysctl_table.m4
+++ b/config/kernel-register_sysctl_table.m4
@@ -25,3 +25,36 @@ AC_DEFUN([ZFS_AC_KERNEL_REGISTER_SYSCTL_TABLE], [
AC_MSG_RESULT([no])
])
])
+
+dnl #
+dnl # Linux 6.11 makes const the ctl_table arg of proc_handler
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_SRC_PROC_HANDLER_CTL_TABLE_CONST], [
+ ZFS_LINUX_TEST_SRC([has_proc_handler_ctl_table_const], [
+ #include <linux/sysctl.h>
+
+ static int test_handler(
+ const struct ctl_table *ctl __attribute((unused)),
+ int write __attribute((unused)),
+ void *buffer __attribute((unused)),
+ size_t *lenp __attribute((unused)),
+ loff_t *ppos __attribute((unused)))
+ {
+ return (0);
+ }
+ ], [
+ proc_handler *ph __attribute((unused)) =
+ &test_handler;
+ ])
+])
+
+AC_DEFUN([ZFS_AC_KERNEL_PROC_HANDLER_CTL_TABLE_CONST], [
+ AC_MSG_CHECKING([whether proc_handler ctl_table arg is const])
+ ZFS_LINUX_TEST_RESULT([has_proc_handler_ctl_table_const], [
+ AC_MSG_RESULT([yes])
+ AC_DEFINE(HAVE_PROC_HANDLER_CTL_TABLE_CONST, 1,
+ [proc_handler ctl_table arg is const])
+ ], [
+ AC_MSG_RESULT([no])
+ ])
+])
diff --git a/config/kernel.m4 b/config/kernel.m4
index b51477b6a..209dbf42f 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -166,6 +166,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_SRC], [
ZFS_AC_KERNEL_SRC_WRITEPAGE_T
ZFS_AC_KERNEL_SRC_RECLAIMED
ZFS_AC_KERNEL_SRC_REGISTER_SYSCTL_TABLE
+ ZFS_AC_KERNEL_SRC_PROC_HANDLER_CTL_TABLE_CONST
ZFS_AC_KERNEL_SRC_COPY_SPLICE_READ
ZFS_AC_KERNEL_SRC_SYNC_BDEV
ZFS_AC_KERNEL_SRC_MM_PAGE_SIZE
@@ -317,6 +318,7 @@ AC_DEFUN([ZFS_AC_KERNEL_TEST_RESULT], [
ZFS_AC_KERNEL_WRITEPAGE_T
ZFS_AC_KERNEL_RECLAIMED
ZFS_AC_KERNEL_REGISTER_SYSCTL_TABLE
+ ZFS_AC_KERNEL_PROC_HANDLER_CTL_TABLE_CONST
ZFS_AC_KERNEL_COPY_SPLICE_READ
ZFS_AC_KERNEL_SYNC_BDEV
ZFS_AC_KERNEL_MM_PAGE_SIZE
diff --git a/module/os/linux/spl/spl-proc.c b/module/os/linux/spl/spl-proc.c
index f0f929d3c..22f587934 100644
--- a/module/os/linux/spl/spl-proc.c
+++ b/module/os/linux/spl/spl-proc.c
@@ -43,6 +43,12 @@ typedef struct ctl_table __no_const spl_ctl_table;
typedef struct ctl_table spl_ctl_table;
#endif
+#ifdef HAVE_PROC_HANDLER_CTL_TABLE_CONST
+#define CONST_CTL_TABLE const struct ctl_table
+#else
+#define CONST_CTL_TABLE struct ctl_table
+#endif
+
static unsigned long table_min = 0;
static unsigned long table_max = ~0;
@@ -60,7 +66,7 @@ struct proc_dir_entry *proc_spl_kstat = NULL;
#ifdef DEBUG_KMEM
static int
-proc_domemused(struct ctl_table *table, int write,
+proc_domemused(CONST_CTL_TABLE *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int rc = 0;
@@ -88,7 +94,7 @@ proc_domemused(struct ctl_table *table, int write,
#endif /* DEBUG_KMEM */
static int
-proc_doslab(struct ctl_table *table, int write,
+proc_doslab(CONST_CTL_TABLE *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int rc = 0;
@@ -135,7 +141,7 @@ proc_doslab(struct ctl_table *table, int write,
}
static int
-proc_dohostid(struct ctl_table *table, int write,
+proc_dohostid(CONST_CTL_TABLE *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
char *end, str[32];