diff options
author | Serapheim Dimitropoulos <serapheimd@gmail.com> | 2019-01-13 10:09:46 -0800 |
---|---|---|
committer | Brian Behlendorf <behlendorf1@llnl.gov> | 2019-01-13 10:09:46 -0800 |
commit | 61c3391acc988573aaf9e59550f863de4affcb68 (patch) | |
tree | 915910c51e0bef4cf4ee0d792c75602e3d814ea3 /include | |
parent | 83c796c5e9d9ecb28e9553338f079a5d6b015b10 (diff) |
Serialize ZTHR operations to eliminate races
Adds a new lock for serializing operations on zthrs.
The commit also includes some code cleanup and
refactoring.
Reviewed by: Matt Ahrens <mahrens@delphix.com>
Reviewed by: Tom Caputi <tcaputi@datto.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Serapheim Dimitropoulos <serapheim@delphix.com>
Closes #8229
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/spa_checkpoint.h | 2 | ||||
-rw-r--r-- | include/sys/zthr.h | 22 |
2 files changed, 4 insertions, 20 deletions
diff --git a/include/sys/spa_checkpoint.h b/include/sys/spa_checkpoint.h index a5c856014..9be2b6eea 100644 --- a/include/sys/spa_checkpoint.h +++ b/include/sys/spa_checkpoint.h @@ -37,7 +37,7 @@ int spa_checkpoint(const char *); int spa_checkpoint_discard(const char *); boolean_t spa_checkpoint_discard_thread_check(void *, zthr_t *); -int spa_checkpoint_discard_thread(void *, zthr_t *); +void spa_checkpoint_discard_thread(void *, zthr_t *); int spa_checkpoint_get_stats(spa_t *, pool_checkpoint_stat_t *); diff --git a/include/sys/zthr.h b/include/sys/zthr.h index ce6033ecb..33c218ec4 100644 --- a/include/sys/zthr.h +++ b/include/sys/zthr.h @@ -14,42 +14,26 @@ */ /* - * Copyright (c) 2017 by Delphix. All rights reserved. + * Copyright (c) 2017, 2018 by Delphix. All rights reserved. */ #ifndef _SYS_ZTHR_H #define _SYS_ZTHR_H typedef struct zthr zthr_t; -typedef int (zthr_func_t)(void *, zthr_t *); +typedef void (zthr_func_t)(void *, zthr_t *); typedef boolean_t (zthr_checkfunc_t)(void *, zthr_t *); -struct zthr { - kthread_t *zthr_thread; - kmutex_t zthr_lock; - kcondvar_t zthr_cv; - boolean_t zthr_cancel; - hrtime_t zthr_wait_time; - - zthr_checkfunc_t *zthr_checkfunc; - zthr_func_t *zthr_func; - void *zthr_arg; - int zthr_rc; -}; - extern zthr_t *zthr_create(zthr_checkfunc_t checkfunc, zthr_func_t *func, void *arg); extern zthr_t *zthr_create_timer(zthr_checkfunc_t *checkfunc, zthr_func_t *func, void *arg, hrtime_t nano_wait); - -extern void zthr_exit(zthr_t *t, int rc); extern void zthr_destroy(zthr_t *t); extern void zthr_wakeup(zthr_t *t); -extern int zthr_cancel(zthr_t *t); +extern void zthr_cancel(zthr_t *t); extern void zthr_resume(zthr_t *t); extern boolean_t zthr_iscancelled(zthr_t *t); -extern boolean_t zthr_isrunning(zthr_t *t); #endif /* _SYS_ZTHR_H */ |