From 7e3df9db128722143734a9459771365ea19c1c40 Mon Sep 17 00:00:00 2001 From: Ryan Moeller Date: Tue, 7 Apr 2020 13:06:22 -0400 Subject: [PATCH] Finish refactoring for ZFS_MODULE_PARAM_CALL Linux and FreeBSD have different parameters for tunable proc handler. This has prevented FreeBSD from implementing the ZFS_MODULE_PARAM_CALL macro. To complete the sharing of ZFS_MODULE_PARAM_CALL declarations, create per-platform definitions of the parameter list, ZFS_MODULE_PARAM_ARGS. With the declarations wired up we discovered an incorrect scope prefix for spa_slop_shift, so this is now fixed. Reviewed-by: Brian Behlendorf Signed-off-by: Ryan Moeller Closes #10179 --- include/os/linux/kernel/linux/mod_compat.h | 4 +++- include/sys/arc_impl.h | 4 ++-- include/sys/spa.h | 8 ++++---- include/sys/zfs_context.h | 1 + module/zfs/spa_misc.c | 2 +- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/include/os/linux/kernel/linux/mod_compat.h b/include/os/linux/kernel/linux/mod_compat.h index a0f618d14c1a..1a53c66e522e 100644 --- a/include/os/linux/kernel/linux/mod_compat.h +++ b/include/os/linux/kernel/linux/mod_compat.h @@ -134,12 +134,14 @@ enum scope_prefix_types { * spa_slop_shift */ /* BEGIN CSTYLED */ -#define ZFS_MODULE_PARAM_CALL(scope_prefix, name_prefix, name, setfunc, getfunc, perm, desc) \ +#define ZFS_MODULE_PARAM_CALL(scope_prefix, name_prefix, name, setfunc, getfunc, perm, desc) \ CTASSERT_GLOBAL((sizeof (scope_prefix) == sizeof (enum scope_prefix_types))); \ module_param_call(name_prefix ## name, setfunc, getfunc, &name_prefix ## name, perm); \ MODULE_PARM_DESC(name_prefix ## name, desc) /* END CSTYLED */ +#define ZFS_MODULE_PARAM_ARGS const char *buf, zfs_kernel_param_t *kp + #define ZFS_MODULE_DESCRIPTION(s) MODULE_DESCRIPTION(s) #define ZFS_MODULE_AUTHOR(s) MODULE_AUTHOR(s) #define ZFS_MODULE_LICENSE(s) MODULE_LICENSE(s) diff --git a/include/sys/arc_impl.h b/include/sys/arc_impl.h index c55640f8ba4c..d4167945f42a 100644 --- a/include/sys/arc_impl.h +++ b/include/sys/arc_impl.h @@ -614,8 +614,8 @@ extern uint64_t arc_free_memory(void); extern int64_t arc_available_memory(void); extern void arc_tuning_update(void); -extern int param_set_arc_long(const char *buf, zfs_kernel_param_t *kp); -extern int param_set_arc_int(const char *buf, zfs_kernel_param_t *kp); +extern int param_set_arc_long(ZFS_MODULE_PARAM_ARGS); +extern int param_set_arc_int(ZFS_MODULE_PARAM_ARGS); #ifdef __cplusplus } diff --git a/include/sys/spa.h b/include/sys/spa.h index 780119e9af93..e1fab3c69772 100644 --- a/include/sys/spa.h +++ b/include/sys/spa.h @@ -1179,10 +1179,10 @@ extern void spa_notify_waiters(spa_t *spa); extern void spa_wake_waiters(spa_t *spa); /* module param call functions */ -int param_set_deadman_ziotime(const char *val, zfs_kernel_param_t *kp); -int param_set_deadman_synctime(const char *val, zfs_kernel_param_t *kp); -int param_set_slop_shift(const char *buf, zfs_kernel_param_t *kp); -int param_set_deadman_failmode(const char *val, zfs_kernel_param_t *kp); +int param_set_deadman_ziotime(ZFS_MODULE_PARAM_ARGS); +int param_set_deadman_synctime(ZFS_MODULE_PARAM_ARGS); +int param_set_slop_shift(ZFS_MODULE_PARAM_ARGS); +int param_set_deadman_failmode(ZFS_MODULE_PARAM_ARGS); #ifdef ZFS_DEBUG #define dprintf_bp(bp, fmt, ...) do { \ diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index 39c778b1e04a..00642175d6b3 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -198,6 +198,7 @@ typedef struct zfs_kernel_param { } zfs_kernel_param_t; #define ZFS_MODULE_PARAM(scope_prefix, name_prefix, name, type, perm, desc) +#define ZFS_MODULE_PARAM_ARGS void #define ZFS_MODULE_PARAM_CALL(scope_prefix, name_prefix, name, setfunc, \ getfunc, perm, desc) diff --git a/module/zfs/spa_misc.c b/module/zfs/spa_misc.c index 6f0783468c45..6a43071119eb 100644 --- a/module/zfs/spa_misc.c +++ b/module/zfs/spa_misc.c @@ -2891,5 +2891,5 @@ ZFS_MODULE_PARAM(zfs, zfs_, special_class_metadata_reserve_pct, INT, ZMOD_RW, "free space available"); /* END CSTYLED */ -ZFS_MODULE_PARAM_CALL(spa, spa_, slop_shift, param_set_slop_shift, +ZFS_MODULE_PARAM_CALL(zfs_spa, spa_, slop_shift, param_set_slop_shift, param_get_int, ZMOD_RW, "Reserved free space in pool");