mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-01-28 02:44:30 +03:00
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_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_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_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
|
#ifdef ZFS_DEBUG
|
||||||
#define dprintf_bp(bp, fmt, ...) do { \
|
#define dprintf_bp(bp, fmt, ...) do { \
|
||||||
|
@ -433,6 +433,7 @@ struct spa {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern char *spa_config_path;
|
extern char *spa_config_path;
|
||||||
|
extern char *zfs_deadman_failmode;
|
||||||
extern int spa_slop_shift;
|
extern int spa_slop_shift;
|
||||||
extern void spa_taskq_dispatch_ent(spa_t *spa, zio_type_t t, zio_taskq_type_t q,
|
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);
|
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,
|
extern sysevent_t *spa_event_create(spa_t *spa, vdev_t *vd, nvlist_t *hist_nvl,
|
||||||
const char *name);
|
const char *name);
|
||||||
extern void spa_event_post(sysevent_t *ev);
|
extern void spa_event_post(sysevent_t *ev);
|
||||||
|
extern int param_set_deadman_failmode_common(const char *val);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,19 @@
|
|||||||
#include <sys/kstat.h>
|
#include <sys/kstat.h>
|
||||||
#include "zfs_prop.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
|
int
|
||||||
param_set_deadman_ziotime(const char *val, zfs_kernel_param_t *kp)
|
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)
|
#if defined(_KERNEL)
|
||||||
|
|
||||||
static int
|
int
|
||||||
param_set_deadman_failmode(const char *val, zfs_kernel_param_t *kp)
|
param_set_deadman_failmode_common(const char *val)
|
||||||
{
|
{
|
||||||
spa_t *spa = NULL;
|
spa_t *spa = NULL;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
if (val == NULL)
|
if (val == NULL)
|
||||||
return (SET_ERROR(-EINVAL));
|
return (SET_ERROR(EINVAL));
|
||||||
|
|
||||||
if ((p = strchr(val, '\n')) != NULL)
|
if ((p = strchr(val, '\n')) != NULL)
|
||||||
*p = '\0';
|
*p = '\0';
|
||||||
|
|
||||||
if (strcmp(val, "wait") != 0 && strcmp(val, "continue") != 0 &&
|
if (strcmp(val, "wait") != 0 && strcmp(val, "continue") != 0 &&
|
||||||
strcmp(val, "panic"))
|
strcmp(val, "panic"))
|
||||||
return (SET_ERROR(-EINVAL));
|
return (SET_ERROR(EINVAL));
|
||||||
|
|
||||||
if (spa_mode_global != SPA_MODE_UNINIT) {
|
if (spa_mode_global != SPA_MODE_UNINIT) {
|
||||||
mutex_enter(&spa_namespace_lock);
|
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);
|
mutex_exit(&spa_namespace_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (param_set_charp(val, kp));
|
return (0);
|
||||||
}
|
}
|
||||||
#endif
|
#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,
|
ZFS_MODULE_PARAM(zfs, zfs_, user_indirect_is_special, INT, ZMOD_RW,
|
||||||
"Place user data indirect blocks into the special class");
|
"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 */
|
/* 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,
|
ZFS_MODULE_PARAM_CALL(zfs_deadman, zfs_deadman_, synctime_ms,
|
||||||
param_set_deadman_synctime, param_get_ulong, ZMOD_RW,
|
param_set_deadman_synctime, param_get_ulong, ZMOD_RW,
|
||||||
"Pool sync expiration time in milliseconds");
|
"Pool sync expiration time in milliseconds");
|
||||||
|
Loading…
Reference in New Issue
Block a user