Refactor deadman set failmode to be cross platform

Update zfs_deadman_failmode to use the ZFS_MODULE_PARAM_CALL
wrapper, and split the common and platform specific portions.

Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9670
This commit is contained in:
Matthew Macy
2019-12-05 12:40:45 -08:00
committed by Brian Behlendorf
parent 2a8ba608d3
commit e64e84eca5
4 changed files with 25 additions and 12 deletions
+13
View File
@@ -42,6 +42,19 @@
#include <sys/kstat.h>
#include "zfs_prop.h"
int
param_set_deadman_failmode(const char *val, zfs_kernel_param_t *kp)
{
int error;
error = -param_set_deadman_failmode_common(val);
if (error == 0)
error = param_set_charp(val, kp);
return (error);
}
int
param_set_deadman_ziotime(const char *val, zfs_kernel_param_t *kp)
{
+9 -11
View File
@@ -2708,21 +2708,21 @@ spa_suspend_async_destroy(spa_t *spa)
#if defined(_KERNEL)
static int
param_set_deadman_failmode(const char *val, zfs_kernel_param_t *kp)
int
param_set_deadman_failmode_common(const char *val)
{
spa_t *spa = NULL;
char *p;
if (val == NULL)
return (SET_ERROR(-EINVAL));
return (SET_ERROR(EINVAL));
if ((p = strchr(val, '\n')) != NULL)
*p = '\0';
if (strcmp(val, "wait") != 0 && strcmp(val, "continue") != 0 &&
strcmp(val, "panic"))
return (SET_ERROR(-EINVAL));
return (SET_ERROR(EINVAL));
if (spa_mode_global != SPA_MODE_UNINIT) {
mutex_enter(&spa_namespace_lock);
@@ -2731,7 +2731,7 @@ param_set_deadman_failmode(const char *val, zfs_kernel_param_t *kp)
mutex_exit(&spa_namespace_lock);
}
return (param_set_charp(val, kp));
return (0);
}
#endif
@@ -2847,13 +2847,11 @@ ZFS_MODULE_PARAM(zfs, zfs_, ddt_data_is_special, INT, ZMOD_RW,
ZFS_MODULE_PARAM(zfs, zfs_, user_indirect_is_special, INT, ZMOD_RW,
"Place user data indirect blocks into the special class");
#ifdef _KERNEL
module_param_call(zfs_deadman_failmode, param_set_deadman_failmode,
param_get_charp, &zfs_deadman_failmode, 0644);
MODULE_PARM_DESC(zfs_deadman_failmode, "Failmode for deadman timer");
#endif
/* BEGIN CSTYLED */
ZFS_MODULE_PARAM_CALL(zfs_deadman, zfs_deadman_, failmode,
param_set_deadman_failmode, param_get_charp, ZMOD_RW,
"Failmode for deadman timer");
ZFS_MODULE_PARAM_CALL(zfs_deadman, zfs_deadman_, synctime_ms,
param_set_deadman_synctime, param_get_ulong, ZMOD_RW,
"Pool sync expiration time in milliseconds");