mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-26 04:07:45 +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
+6
-8
@@ -1486,13 +1486,11 @@ spa_unload(spa_t *spa)
|
||||
}
|
||||
|
||||
if (spa->spa_condense_zthr != NULL) {
|
||||
ASSERT(!zthr_isrunning(spa->spa_condense_zthr));
|
||||
zthr_destroy(spa->spa_condense_zthr);
|
||||
spa->spa_condense_zthr = NULL;
|
||||
}
|
||||
|
||||
if (spa->spa_checkpoint_discard_zthr != NULL) {
|
||||
ASSERT(!zthr_isrunning(spa->spa_checkpoint_discard_zthr));
|
||||
zthr_destroy(spa->spa_checkpoint_discard_zthr);
|
||||
spa->spa_checkpoint_discard_zthr = NULL;
|
||||
}
|
||||
@@ -7214,12 +7212,12 @@ spa_async_suspend(spa_t *spa)
|
||||
spa_vdev_remove_suspend(spa);
|
||||
|
||||
zthr_t *condense_thread = spa->spa_condense_zthr;
|
||||
if (condense_thread != NULL && zthr_isrunning(condense_thread))
|
||||
VERIFY0(zthr_cancel(condense_thread));
|
||||
if (condense_thread != NULL)
|
||||
zthr_cancel(condense_thread);
|
||||
|
||||
zthr_t *discard_thread = spa->spa_checkpoint_discard_zthr;
|
||||
if (discard_thread != NULL && zthr_isrunning(discard_thread))
|
||||
VERIFY0(zthr_cancel(discard_thread));
|
||||
if (discard_thread != NULL)
|
||||
zthr_cancel(discard_thread);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -7232,11 +7230,11 @@ spa_async_resume(spa_t *spa)
|
||||
spa_restart_removal(spa);
|
||||
|
||||
zthr_t *condense_thread = spa->spa_condense_zthr;
|
||||
if (condense_thread != NULL && !zthr_isrunning(condense_thread))
|
||||
if (condense_thread != NULL)
|
||||
zthr_resume(condense_thread);
|
||||
|
||||
zthr_t *discard_thread = spa->spa_checkpoint_discard_zthr;
|
||||
if (discard_thread != NULL && !zthr_isrunning(discard_thread))
|
||||
if (discard_thread != NULL)
|
||||
zthr_resume(discard_thread);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user