Add zfs_multihost_interval tunable handler for FreeBSD

This tunable required a handler to be implemented for
ZFS_MODULE_PARAM_CALL.

Add the handler so the tunable can be declared in common code.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #10490
This commit is contained in:
Ryan Moeller 2020-06-23 16:32:42 -04:00 committed by GitHub
parent 2451a55368
commit 9192f27c1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 7 deletions

View File

@ -72,6 +72,9 @@
#define param_set_deadman_ziotime_args(var) \ #define param_set_deadman_ziotime_args(var) \
CTLTYPE_ULONG, NULL, 0, param_set_deadman_ziotime, "LU" CTLTYPE_ULONG, NULL, 0, param_set_deadman_ziotime, "LU"
#define param_set_multihost_interval_args(var) \
CTLTYPE_ULONG, &var, 0, param_set_multihost_interval, "LU"
#define param_set_slop_shift_args(var) \ #define param_set_slop_shift_args(var) \
CTLTYPE_INT, &var, 0, param_set_slop_shift, "I" CTLTYPE_INT, &var, 0, param_set_slop_shift, "I"

View File

@ -63,6 +63,7 @@ extern void mmp_update_uberblock(struct spa *spa, struct uberblock *ub);
extern void mmp_signal_all_threads(void); extern void mmp_signal_all_threads(void);
/* Global tuning */ /* Global tuning */
extern int param_set_multihost_interval(ZFS_MODULE_PARAM_ARGS);
extern ulong_t zfs_multihost_interval; extern ulong_t zfs_multihost_interval;
extern uint_t zfs_multihost_fail_intervals; extern uint_t zfs_multihost_fail_intervals;
extern uint_t zfs_multihost_import_intervals; extern uint_t zfs_multihost_import_intervals;

View File

@ -691,3 +691,18 @@ param_set_slop_shift(SYSCTL_HANDLER_ARGS)
return (0); return (0);
} }
int
param_set_multihost_interval(SYSCTL_HANDLER_ARGS)
{
int err;
err = sysctl_handle_long(oidp, arg1, 0, req);
if (err != 0 || req->newptr == NULL)
return (err);
if (spa_mode_global != SPA_MODE_UNINIT)
mmp_signal_all_threads();
return (0);
}

View File

@ -25,7 +25,7 @@
#include <sys/zfs_context.h> #include <sys/zfs_context.h>
#include <sys/mmp.h> #include <sys/mmp.h>
static int int
param_set_multihost_interval(const char *val, zfs_kernel_param_t *kp) param_set_multihost_interval(const char *val, zfs_kernel_param_t *kp)
{ {
int ret; int ret;
@ -39,8 +39,3 @@ param_set_multihost_interval(const char *val, zfs_kernel_param_t *kp)
return (ret); return (ret);
} }
module_param_call(zfs_multihost_interval, param_set_multihost_interval,
param_get_ulong, &zfs_multihost_interval, 0644);
MODULE_PARM_DESC(zfs_multihost_interval,
"Milliseconds between mmp writes to each leaf");

View File

@ -715,6 +715,12 @@ mmp_signal_all_threads(void)
mutex_exit(&spa_namespace_lock); mutex_exit(&spa_namespace_lock);
} }
/* BEGIN CSTYLED */
ZFS_MODULE_PARAM_CALL(zfs_multihost, zfs_multihost_, interval,
param_set_multihost_interval, param_get_ulong, ZMOD_RW,
"Milliseconds between mmp writes to each leaf");
/* END CSTYLED */
ZFS_MODULE_PARAM(zfs_multihost, zfs_multihost_, fail_intervals, UINT, ZMOD_RW, ZFS_MODULE_PARAM(zfs_multihost, zfs_multihost_, fail_intervals, UINT, ZMOD_RW,
"Max allowed period without a successful mmp write"); "Max allowed period without a successful mmp write");

View File

@ -55,7 +55,7 @@ METASLAB_FORCE_GANGING metaslab.force_ganging metaslab_force_ganging
MULTIHOST_FAIL_INTERVALS multihost.fail_intervals zfs_multihost_fail_intervals MULTIHOST_FAIL_INTERVALS multihost.fail_intervals zfs_multihost_fail_intervals
MULTIHOST_HISTORY UNSUPPORTED zfs_multihost_history MULTIHOST_HISTORY UNSUPPORTED zfs_multihost_history
MULTIHOST_IMPORT_INTERVALS multihost.import_intervals zfs_multihost_import_intervals MULTIHOST_IMPORT_INTERVALS multihost.import_intervals zfs_multihost_import_intervals
MULTIHOST_INTERVAL UNSUPPORTED zfs_multihost_interval MULTIHOST_INTERVAL multihost.interval zfs_multihost_interval
OVERRIDE_ESTIMATE_RECORDSIZE send.override_estimate_recordsize zfs_override_estimate_recordsize OVERRIDE_ESTIMATE_RECORDSIZE send.override_estimate_recordsize zfs_override_estimate_recordsize
REMOVAL_SUSPEND_PROGRESS removal_suspend_progress zfs_removal_suspend_progress REMOVAL_SUSPEND_PROGRESS removal_suspend_progress zfs_removal_suspend_progress
REMOVE_MAX_SEGMENT remove_max_segment zfs_remove_max_segment REMOVE_MAX_SEGMENT remove_max_segment zfs_remove_max_segment