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:
parent
2a8ba608d3
commit
e64e84eca5
|
@ -1182,6 +1182,7 @@ extern void spa_wake_waiters(spa_t *spa);
|
|||
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);
|
||||
|
||||
#ifdef ZFS_DEBUG
|
||||
#define dprintf_bp(bp, fmt, ...) do { \
|
||||
|
|
|
@ -433,6 +433,7 @@ struct spa {
|
|||
};
|
||||
|
||||
extern char *spa_config_path;
|
||||
extern char *zfs_deadman_failmode;
|
||||
extern int spa_slop_shift;
|
||||
extern void spa_taskq_dispatch_ent(spa_t *spa, zio_type_t t, zio_taskq_type_t q,
|
||||
task_func_t *func, void *arg, uint_t flags, taskq_ent_t *ent);
|
||||
|
@ -443,7 +444,7 @@ extern void spa_load_l2cache(spa_t *spa);
|
|||
extern sysevent_t *spa_event_create(spa_t *spa, vdev_t *vd, nvlist_t *hist_nvl,
|
||||
const char *name);
|
||||
extern void spa_event_post(sysevent_t *ev);
|
||||
|
||||
extern int param_set_deadman_failmode_common(const char *val);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Reference in New Issue