From 0fac9c9e6d8d74f56be09cd84ffb30197d2dcaad Mon Sep 17 00:00:00 2001 From: Brian Behlendorf Date: Thu, 2 Oct 2014 14:15:19 -0400 Subject: [PATCH] Remove proc_handler() wrapper As of Linux 2.6.32 the proc handlers where updated to expect only five arguments. Therefore there is no longer a need to maintain this compatibility code and this infrastructure can be simplified. Signed-off-by: Brian Behlendorf --- config/spl-build.m4 | 20 -------- include/linux/Makefile.am | 1 - include/linux/sysctl_compat.h | 96 ----------------------------------- include/sys/types.h | 1 - module/spl/spl-proc.c | 60 ++++++++++++++-------- 5 files changed, 39 insertions(+), 139 deletions(-) delete mode 100644 include/linux/sysctl_compat.h diff --git a/config/spl-build.m4 b/config/spl-build.m4 index 49cbfb624..253a51390 100644 --- a/config/spl-build.m4 +++ b/config/spl-build.m4 @@ -37,7 +37,6 @@ AC_DEFUN([SPL_AC_CONFIG_KERNEL], [ SPL_AC_FS_STRUCT_SPINLOCK SPL_AC_KUIDGID_T SPL_AC_PUT_TASK_STRUCT - SPL_AC_5ARGS_PROC_HANDLER SPL_AC_KVASPRINTF SPL_AC_EXPORTED_RWSEM_IS_LOCKED SPL_AC_KERNEL_FALLOCATE @@ -1181,25 +1180,6 @@ AC_DEFUN([SPL_AC_PUT_TASK_STRUCT], ]) ]) -dnl # -dnl # 2.6.32 API change, -dnl # Unused 'struct file *' removed from prototype. -dnl # -AC_DEFUN([SPL_AC_5ARGS_PROC_HANDLER], [ - AC_MSG_CHECKING([whether proc_handler() wants 5 args]) - SPL_LINUX_TRY_COMPILE([ - #include - ],[ - proc_dostring(NULL, 0, NULL, NULL, NULL); - ],[ - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_5ARGS_PROC_HANDLER, 1, - [proc_handler() wants 5 args]) - ],[ - AC_MSG_RESULT(no) - ]) -]) - dnl # dnl # 2.6.x API change, dnl # kvasprintf() function added. diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am index bbd422770..422159497 100644 --- a/include/linux/Makefile.am +++ b/include/linux/Makefile.am @@ -11,7 +11,6 @@ KERNEL_H = \ $(top_srcdir)/include/linux/module_compat.h \ $(top_srcdir)/include/linux/proc_compat.h \ $(top_srcdir)/include/linux/rwsem_compat.h \ - $(top_srcdir)/include/linux/sysctl_compat.h \ $(top_srcdir)/include/linux/wait_compat.h \ $(top_srcdir)/include/linux/zlib_compat.h diff --git a/include/linux/sysctl_compat.h b/include/linux/sysctl_compat.h deleted file mode 100644 index bc226537d..000000000 --- a/include/linux/sysctl_compat.h +++ /dev/null @@ -1,96 +0,0 @@ -/*****************************************************************************\ - * Copyright (C) 2007-2010 Lawrence Livermore National Security, LLC. - * Copyright (C) 2007 The Regents of the University of California. - * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). - * Written by Brian Behlendorf . - * UCRL-CODE-235197 - * - * This file is part of the SPL, Solaris Porting Layer. - * For details, see . - * - * The SPL is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * The SPL is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * for more details. - * - * You should have received a copy of the GNU General Public License along - * with the SPL. If not, see . -\*****************************************************************************/ - -#ifndef _SPL_SYSCTL_COMPAT_H -#define _SPL_SYSCTL_COMPAT_H - -#include - -/* proc_handler() / proc_do* API changes - * 2.6.x - 2.6.31: 6 args, prototype includes 'struct file *' - * 2.6.32 - 2.6.y: 5 args, removed unused 'struct file *' from prototype - * - * Generic SPL_PROC_HANDLER() macro should be used for correct prototypes. - * It will define the following function arguments which can and should be - * used with the spl_proc_* helper macros. - * - * struct ctl_table *table, - * int write, - * struct file *filp [2.6.31 and earlier kernels], - * void __user *buffer, - * size_t *lenp, - * loff_t *ppos, - */ -#ifdef HAVE_5ARGS_PROC_HANDLER - -#define SPL_PROC_HANDLER(proc_handler) \ -static int \ -proc_handler(struct ctl_table *table, int write, \ - void __user *buffer, size_t *lenp, loff_t *ppos) - -#define spl_proc_dostring(table, write, filp, buffer, lenp, ppos) \ - proc_dostring(table, write, buffer, lenp, ppos) -#define spl_proc_dointvec(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec(table, write, buffer, lenp, ppos) -#define spl_proc_dointvec_minmax(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec_minmax(table, write, buffer, lenp, ppos) -#define spl_proc_dointvec_jiffies(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec_jiffies(table, write, buffer, lenp, ppos) -#define spl_proc_dointvec_userhz_jiffies(table,write,filp,buffer,lenp,ppos) \ - proc_dointvec_userhz_jiffies(table, write, buffer, lenp, ppos) -#define spl_proc_dointvec_ms_jiffies(table,write,filp,buffer,lenp,ppos) \ - proc_dointvec_ms_jiffies(table, write, buffer, lenp, ppos) -#define spl_proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos) \ - proc_doulongvec_minmax(table, write, buffer, lenp, ppos) -#define spl_proc_doulongvec_ms_jiffies_minmax(table,write,filp,buffer,lenp,ppos)\ - proc_doulongvec_ms_jiffies_minmax(table, write, buffer, lenp, ppos) - -#else /* HAVE_5ARGS_PROC_HANDLER */ - -#define SPL_PROC_HANDLER(proc_handler) \ -static int \ -proc_handler(struct ctl_table *table, int write, struct file *filp, \ - void __user *buffer, size_t *lenp, loff_t *ppos) - -#define spl_proc_dostring(table, write, filp, buffer, lenp, ppos) \ - proc_dostring(table, write, filp, buffer, lenp, ppos) -#define spl_proc_dointvec(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec(table, write, filp, buffer, lenp, ppos) -#define spl_proc_dointvec_minmax(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec_minmax(table, write, filp, buffer, lenp, ppos) -#define spl_proc_dointvec_jiffies(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec_jiffies(table, write, filp, buffer, lenp, ppos) -#define spl_proc_dointvec_userhz_jiffies(table,write,filp,buffer,lenp,ppos) \ - proc_dointvec_userhz_jiffies(table, write, filp, buffer, lenp, ppos) -#define spl_proc_dointvec_ms_jiffies(table, write, filp, buffer, lenp, ppos) \ - proc_dointvec_ms_jiffies(table, write, filp, buffer, lenp, ppos) -#define spl_proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos) \ - proc_doulongvec_minmax(table, write, filp, buffer, lenp, ppos) -#define spl_proc_doulongvec_ms_jiffies_minmax(table,write,filp,buffer,lenp,ppos) \ - proc_doulongvec_ms_jiffies_minmax(table,write,filp,buffer,lenp,ppos) - - -#endif /* HAVE_5ARGS_PROC_HANDLER */ - -#endif /* _SPL_SYSCTL_COMPAT_H */ diff --git a/include/sys/types.h b/include/sys/types.h index 2745db9c7..b7b8b7bfc 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include diff --git a/module/spl/spl-proc.c b/module/spl/spl-proc.c index 42733e0d7..6ecc0c31c 100644 --- a/module/spl/spl-proc.c +++ b/module/spl/spl-proc.c @@ -111,7 +111,9 @@ proc_copyout_string(char *ubuffer, int ubuffer_size, } #ifdef DEBUG_LOG -SPL_PROC_HANDLER(proc_dobitmasks) +static int +proc_dobitmasks(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { unsigned long *mask = table->data; int is_subsys = (mask == &spl_debug_subsys) ? 1 : 0; @@ -152,7 +154,9 @@ SPL_PROC_HANDLER(proc_dobitmasks) SRETURN(rc); } -SPL_PROC_HANDLER(proc_debug_mb) +static int +proc_debug_mb(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { char str[32]; int rc, len; @@ -181,7 +185,9 @@ SPL_PROC_HANDLER(proc_debug_mb) SRETURN(rc); } -SPL_PROC_HANDLER(proc_dump_kernel) +static int +proc_dump_kernel(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { SENTRY; @@ -195,7 +201,9 @@ SPL_PROC_HANDLER(proc_dump_kernel) SRETURN(0); } -SPL_PROC_HANDLER(proc_force_bug) +static int +proc_force_bug(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { SENTRY; @@ -207,7 +215,9 @@ SPL_PROC_HANDLER(proc_force_bug) SRETURN(0); } -SPL_PROC_HANDLER(proc_console_max_delay_cs) +static int +proc_console_max_delay_cs(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, max_delay_cs; spl_ctl_table dummy = *table; @@ -219,7 +229,7 @@ SPL_PROC_HANDLER(proc_console_max_delay_cs) if (write) { max_delay_cs = 0; - rc = spl_proc_dointvec(&dummy,write,filp,buffer,lenp,ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); if (rc < 0) SRETURN(rc); @@ -233,13 +243,15 @@ SPL_PROC_HANDLER(proc_console_max_delay_cs) spl_console_max_delay = d; } else { max_delay_cs = (spl_console_max_delay * 100) / HZ; - rc = spl_proc_dointvec(&dummy,write,filp,buffer,lenp,ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); } SRETURN(rc); } -SPL_PROC_HANDLER(proc_console_min_delay_cs) +static int +proc_console_min_delay_cs(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, min_delay_cs; spl_ctl_table dummy = *table; @@ -251,7 +263,7 @@ SPL_PROC_HANDLER(proc_console_min_delay_cs) if (write) { min_delay_cs = 0; - rc = spl_proc_dointvec(&dummy,write,filp,buffer,lenp,ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); if (rc < 0) SRETURN(rc); @@ -265,13 +277,15 @@ SPL_PROC_HANDLER(proc_console_min_delay_cs) spl_console_min_delay = d; } else { min_delay_cs = (spl_console_min_delay * 100) / HZ; - rc = spl_proc_dointvec(&dummy,write,filp,buffer,lenp,ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); } SRETURN(rc); } -SPL_PROC_HANDLER(proc_console_backoff) +static int +proc_console_backoff(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc, backoff; spl_ctl_table dummy = *table; @@ -282,7 +296,7 @@ SPL_PROC_HANDLER(proc_console_backoff) if (write) { backoff = 0; - rc = spl_proc_dointvec(&dummy,write,filp,buffer,lenp,ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); if (rc < 0) SRETURN(rc); @@ -292,7 +306,7 @@ SPL_PROC_HANDLER(proc_console_backoff) spl_console_backoff = backoff; } else { backoff = spl_console_backoff; - rc = spl_proc_dointvec(&dummy,write,filp,buffer,lenp,ppos); + rc = proc_dointvec(&dummy, write, buffer, lenp, ppos); } SRETURN(rc); @@ -300,7 +314,9 @@ SPL_PROC_HANDLER(proc_console_backoff) #endif /* DEBUG_LOG */ #ifdef DEBUG_KMEM -SPL_PROC_HANDLER(proc_domemused) +static int +proc_domemused(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc = 0; unsigned long min = 0, max = ~0, val; @@ -320,14 +336,15 @@ SPL_PROC_HANDLER(proc_domemused) # else val = atomic_read((atomic_t *)table->data); # endif /* HAVE_ATOMIC64_T */ - rc = spl_proc_doulongvec_minmax(&dummy, write, filp, - buffer, lenp, ppos); + rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos); } SRETURN(rc); } -SPL_PROC_HANDLER(proc_doslab) +static int +proc_doslab(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int rc = 0; unsigned long min = 0, max = ~0, val = 0, mask; @@ -367,22 +384,23 @@ SPL_PROC_HANDLER(proc_doslab) } up_read(&spl_kmem_cache_sem); - rc = spl_proc_doulongvec_minmax(&dummy, write, filp, - buffer, lenp, ppos); + rc = proc_doulongvec_minmax(&dummy, write, buffer, lenp, ppos); } SRETURN(rc); } #endif /* DEBUG_KMEM */ -SPL_PROC_HANDLER(proc_dohostid) +static int +proc_dohostid(struct ctl_table *table, int write, + void __user *buffer, size_t *lenp, loff_t *ppos) { int len, rc = 0; char *end, str[32]; SENTRY; if (write) { - /* We can't use spl_proc_doulongvec_minmax() in the write + /* We can't use proc_doulongvec_minmax() in the write * case here because hostid while a hex value has no * leading 0x which confuses the helper function. */ rc = proc_copyin_string(str, sizeof(str), buffer, *lenp); -- 2.40.0