Skip to content

Commit

Permalink
Refactor deadman set failmode to be cross platform
Browse files Browse the repository at this point in the history
Signed-off-by: Matt Macy <[email protected]>
  • Loading branch information
mattmacy committed Dec 4, 2019
1 parent 54c8366 commit 62e5ae6
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 6 deletions.
1 change: 1 addition & 0 deletions include/sys/spa.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 { \
Expand Down
3 changes: 2 additions & 1 deletion include/sys/spa_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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
}
Expand Down
13 changes: 13 additions & 0 deletions module/os/linux/zfs/spa_misc_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
10 changes: 5 additions & 5 deletions module/zfs/spa_misc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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

Expand Down

0 comments on commit 62e5ae6

Please sign in to comment.