This logic is not platform dependent and should reside in the
common code.
Reviewed-by: Igor Kozhukhov <igor@dilos.org>
Reviewed-by: Jorgen Lundman <lundman@lundman.net>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Matt Macy <mmacy@FreeBSD.org>
Closes #9505
void
zvol_fini(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);
-
zvol_fini_impl();
blk_unregister_region(MKDEV(zvol_major, 0), 1UL << MINORBITS);
unregister_blkdev(zvol_major, ZVOL_DRIVER);
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);