diff options
author | Matthew Macy <[email protected]> | 2019-10-25 13:42:54 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2019-10-25 13:42:54 -0700 |
commit | c392c5aec06837aaf6d780fa6ba4dce5a84f6acb (patch) | |
tree | 417c387c0b5726a856e7f1a65f2c8c6f05846f91 /module/zfs/zvol.c | |
parent | 1952fe0e2552d9b65b2db1e76c1a4a3f5ab0f27e (diff) |
Move final zvol_remove_minors to common code
This logic is not platform dependent and should reside in the
common code.
Reviewed-by: Igor Kozhukhov <[email protected]>
Reviewed-by: Jorgen Lundman <[email protected]>
Reviewed-by: Brian Behlendorf <[email protected]>
Signed-off-by: Matt Macy <[email protected]>
Closes #9505
Diffstat (limited to 'module/zfs/zvol.c')
-rw-r--r-- | module/zfs/zvol.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c index 19c20afe7..5006b6af8 100644 --- a/module/zfs/zvol.c +++ b/module/zfs/zvol.c @@ -1713,6 +1713,16 @@ zvol_init_impl(void) void zvol_fini_impl(void) { + zvol_remove_minors_impl(NULL); + + /* + * The call to "zvol_remove_minors_impl" may dispatch entries to + * the system_taskq, but it doesn't wait for those entires to + * complete before it returns. Thus, we must wait for all of the + * removals to finish, before we can continue. + */ + taskq_wait_outstanding(system_taskq, 0); + kmem_free(zvol_htable, ZVOL_HT_SIZE * sizeof (struct hlist_head)); list_destroy(&zvol_state_list); rw_destroy(&zvol_state_lock); |