diff options
-rw-r--r-- | include/sys/spa_impl.h | 2 | ||||
-rw-r--r-- | module/os/linux/zfs/spa_misc_os.c | 18 | ||||
-rw-r--r-- | module/zfs/spa_misc.c | 32 |
3 files changed, 33 insertions, 19 deletions
diff --git a/include/sys/spa_impl.h b/include/sys/spa_impl.h index 9ee04eb25..02cb48057 100644 --- a/include/sys/spa_impl.h +++ b/include/sys/spa_impl.h @@ -445,6 +445,8 @@ 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); +extern void spa_set_deadman_synctime(hrtime_t ns); +extern void spa_set_deadman_ziotime(hrtime_t ns); #ifdef __cplusplus } diff --git a/module/os/linux/zfs/spa_misc_os.c b/module/os/linux/zfs/spa_misc_os.c index 33ff6c082..85de10d40 100644 --- a/module/os/linux/zfs/spa_misc_os.c +++ b/module/os/linux/zfs/spa_misc_os.c @@ -58,20 +58,13 @@ param_set_deadman_failmode(const char *val, zfs_kernel_param_t *kp) int param_set_deadman_ziotime(const char *val, zfs_kernel_param_t *kp) { - spa_t *spa = NULL; int error; error = param_set_ulong(val, kp); if (error < 0) return (SET_ERROR(error)); - if (spa_mode_global != SPA_MODE_UNINIT) { - mutex_enter(&spa_namespace_lock); - while ((spa = spa_next(spa)) != NULL) - spa->spa_deadman_ziotime = - MSEC2NSEC(zfs_deadman_ziotime_ms); - mutex_exit(&spa_namespace_lock); - } + spa_set_deadman_ziotime(MSEC2NSEC(zfs_deadman_ziotime_ms)); return (0); } @@ -79,20 +72,13 @@ 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) { - spa_t *spa = NULL; int error; error = param_set_ulong(val, kp); if (error < 0) return (SET_ERROR(error)); - if (spa_mode_global != SPA_MODE_UNINIT) { - mutex_enter(&spa_namespace_lock); - while ((spa = spa_next(spa)) != NULL) - spa->spa_deadman_synctime = - MSEC2NSEC(zfs_deadman_synctime_ms); - mutex_exit(&spa_namespace_lock); - } + spa_set_deadman_synctime(MSEC2NSEC(zfs_deadman_synctime_ms)); return (0); } diff --git a/module/zfs/spa_misc.c b/module/zfs/spa_misc.c index fe086d7b3..6f0783468 100644 --- a/module/zfs/spa_misc.c +++ b/module/zfs/spa_misc.c @@ -303,20 +303,20 @@ int zfs_free_leak_on_eio = B_FALSE; * has not completed in zfs_deadman_synctime_ms is considered "hung" resulting * in one of three behaviors controlled by zfs_deadman_failmode. */ -unsigned long zfs_deadman_synctime_ms = 600000ULL; +unsigned long zfs_deadman_synctime_ms = 600000UL; /* * This value controls the maximum amount of time zio_wait() will block for an * outstanding IO. By default this is 300 seconds at which point the "hung" * behavior will be applied as described for zfs_deadman_synctime_ms. */ -unsigned long zfs_deadman_ziotime_ms = 300000ULL; +unsigned long zfs_deadman_ziotime_ms = 300000UL; /* * Check time in milliseconds. This defines the frequency at which we check * for hung I/O. */ -unsigned long zfs_deadman_checktime_ms = 60000ULL; +unsigned long zfs_deadman_checktime_ms = 60000UL; /* * By default the deadman is enabled. @@ -1999,6 +1999,32 @@ spa_set_deadman_failmode(spa_t *spa, const char *failmode) spa->spa_deadman_failmode = ZIO_FAILURE_MODE_WAIT; } +void +spa_set_deadman_ziotime(hrtime_t ns) +{ + spa_t *spa = NULL; + + if (spa_mode_global != SPA_MODE_UNINIT) { + mutex_enter(&spa_namespace_lock); + while ((spa = spa_next(spa)) != NULL) + spa->spa_deadman_ziotime = ns; + mutex_exit(&spa_namespace_lock); + } +} + +void +spa_set_deadman_synctime(hrtime_t ns) +{ + spa_t *spa = NULL; + + if (spa_mode_global != SPA_MODE_UNINIT) { + mutex_enter(&spa_namespace_lock); + while ((spa = spa_next(spa)) != NULL) + spa->spa_deadman_synctime = ns; + mutex_exit(&spa_namespace_lock); + } +} + uint64_t dva_get_dsize_sync(spa_t *spa, const dva_t *dva) { |