aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorSerapheim Dimitropoulos <serapheimd@gmail.com>2019-01-13 10:09:46 -0800
committerBrian Behlendorf <behlendorf1@llnl.gov>2019-01-13 10:09:46 -0800
commit61c3391acc988573aaf9e59550f863de4affcb68 (patch)
tree915910c51e0bef4cf4ee0d792c75602e3d814ea3 /include
parent83c796c5e9d9ecb28e9553338f079a5d6b015b10 (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.h2
-rw-r--r--include/sys/zthr.h22
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 */