mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
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
This commit is contained in:
committed by
Brian Behlendorf
parent
83c796c5e9
commit
61c3391acc
@@ -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 *);
|
||||
|
||||
|
||||
+3
-19
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user