]> granicus.if.org Git - zfs/commitdiff
Add missing *_destroy/*_fini calls
authorGvozden Neskovic <neskovic@gmail.com>
Sat, 26 Nov 2016 20:30:44 +0000 (21:30 +0100)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 4 May 2017 23:26:28 +0000 (19:26 -0400)
The proposed debugging enhancements in zfsonlinux/spl#587
identified the following missing *_destroy/*_fini calls.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Gvozden Neskovic <neskovic@gmail.com>
Closes #5428

13 files changed:
cmd/raidz_test/raidz_test.c
include/sys/zfs_ratelimit.h
module/icp/core/kcf_mech_tabs.c
module/icp/core/kcf_prov_tabs.c
module/icp/core/kcf_sched.c
module/zcommon/zfs_comutil.c
module/zfs/dmu_objset.c
module/zfs/dsl_deadlist.c
module/zfs/dsl_pool.c
module/zfs/vdev.c
module/zfs/zap.c
module/zfs/zap_micro.c
module/zfs/zfs_znode.c

index 500ac3dae1a2f1843aaca800048e6b9441aaeb0f..a2b7e6cbfc76dad8949f892e3141beb9158a2210 100644 (file)
@@ -729,6 +729,8 @@ exit:
                    (ulong_t)tried_comb);
        }
 
+       mutex_destroy(&sem_mtx);
+
        return (sweep_state == SWEEP_ERROR ? SWEEP_ERROR : 0);
 }
 
index b9f9f73dc51b8acb9171c03a830b2f8055ada9a3..f36e07841f9284f53b06d80c9476fc614432e809 100644 (file)
@@ -33,5 +33,6 @@ typedef struct {
 int zfs_ratelimit(zfs_ratelimit_t *rl);
 void zfs_ratelimit_init(zfs_ratelimit_t *rl, unsigned int burst,
     unsigned int interval);
+void zfs_ratelimit_fini(zfs_ratelimit_t *rl);
 
 #endif /* _SYS_ZFS_RATELIMIT_H */
index cac34a44a6aaae5eb6e89fb38e92624f704926dc..723bfdb601a49d425eed0d366d1b276b2d2b7487 100644 (file)
@@ -140,7 +140,21 @@ kcf_mech_hash_find(char *mechname)
 void
 kcf_destroy_mech_tabs(void)
 {
-       if (kcf_mech_hash) mod_hash_destroy_hash(kcf_mech_hash);
+       int i, max;
+       kcf_ops_class_t class;
+       kcf_mech_entry_t *me_tab;
+
+       if (kcf_mech_hash)
+               mod_hash_destroy_hash(kcf_mech_hash);
+
+       mutex_destroy(&kcf_mech_tabs_lock);
+
+       for (class = KCF_FIRST_OPSCLASS; class <= KCF_LAST_OPSCLASS; class++) {
+               max = kcf_mech_tabs_tab[class].met_size;
+               me_tab = kcf_mech_tabs_tab[class].met_tab;
+               for (i = 0; i < max; i++)
+                       mutex_destroy(&(me_tab[i].me_mutex));
+       }
 }
 
 /*
index c298320460e5f1aa71bc61c1bba521c5a9ef3268..94e6937bcd7606d66320fc02e832f18625814806 100644 (file)
@@ -67,6 +67,8 @@ static uint_t prov_tab_max = KCF_MAX_PROVIDERS;
 void
 kcf_prov_tab_destroy(void)
 {
+       mutex_destroy(&prov_tab_mutex);
+
        if (prov_tab)
                kmem_free(prov_tab, prov_tab_max *
                    sizeof (kcf_provider_desc_t *));
@@ -485,6 +487,10 @@ kcf_free_provider_desc(kcf_provider_desc_t *desc)
        if (desc->pd_sched_info.ks_taskq != NULL)
                taskq_destroy(desc->pd_sched_info.ks_taskq);
 
+       mutex_destroy(&desc->pd_lock);
+       cv_destroy(&desc->pd_resume_cv);
+       cv_destroy(&desc->pd_remove_cv);
+
        kmem_free(desc, sizeof (kcf_provider_desc_t));
 }
 
index 90136c42176e731e833c8c9a5884c7e6c74c8942..f9bcfe094e6b30f6f1901acc2e22907c1c488050 100644 (file)
@@ -1056,17 +1056,28 @@ kcf_sched_destroy(void)
        if (kcf_misc_kstat)
                kstat_delete(kcf_misc_kstat);
 
-       if (kcfpool)
+       if (kcfpool) {
+               mutex_destroy(&kcfpool->kp_thread_lock);
+               cv_destroy(&kcfpool->kp_nothr_cv);
+               mutex_destroy(&kcfpool->kp_user_lock);
+               cv_destroy(&kcfpool->kp_user_cv);
+
                kmem_free(kcfpool, sizeof (kcf_pool_t));
+       }
 
        for (i = 0; i < REQID_TABLES; i++) {
-               if (kcf_reqid_table[i])
+               if (kcf_reqid_table[i]) {
+                       mutex_destroy(&(kcf_reqid_table[i]->rt_lock));
                        kmem_free(kcf_reqid_table[i],
                            sizeof (kcf_reqid_table_t));
+               }
        }
 
-       if (gswq)
+       if (gswq) {
+               mutex_destroy(&gswq->gs_lock);
+               cv_destroy(&gswq->gs_cv);
                kmem_free(gswq, sizeof (kcf_global_swq_t));
+       }
 
        if (kcf_context_cache)
                kmem_cache_destroy(kcf_context_cache);
@@ -1074,6 +1085,9 @@ kcf_sched_destroy(void)
                kmem_cache_destroy(kcf_areq_cache);
        if (kcf_sreq_cache)
                kmem_cache_destroy(kcf_sreq_cache);
+
+       mutex_destroy(&ntfy_list_lock);
+       cv_destroy(&ntfy_list_cv);
 }
 
 /*
index 704ef84c77c8aa58e73e9acfde18ea7f5131fe4c..52cb7e36555906183295358db9770cad17caa734 100644 (file)
@@ -225,6 +225,17 @@ zfs_ratelimit_init(zfs_ratelimit_t *rl, unsigned int burst,
        mutex_init(&rl->lock, NULL, MUTEX_DEFAULT, NULL);
 }
 
+/*
+ * Finalize rate limit struct
+ *
+ * rl:         zfs_ratelimit_t struct
+ */
+void
+zfs_ratelimit_fini(zfs_ratelimit_t *rl)
+{
+       mutex_destroy(&rl->lock);
+}
+
 /*
  * Re-implementation of the kernel's __ratelimit() function
  *
@@ -275,5 +286,6 @@ EXPORT_SYMBOL(zfs_zpl_version_map);
 EXPORT_SYMBOL(zfs_spa_version_map);
 EXPORT_SYMBOL(zfs_history_event_names);
 EXPORT_SYMBOL(zfs_ratelimit_init);
+EXPORT_SYMBOL(zfs_ratelimit_fini);
 EXPORT_SYMBOL(zfs_ratelimit);
 #endif
index 43de05c5028155e5c51cf68e4a1e6f6518789cd8..946e4602fba5fa8ae789632ffb9fe82eb63c03b5 100644 (file)
@@ -846,6 +846,7 @@ dmu_objset_evict_done(objset_t *os)
        mutex_destroy(&os->os_userused_lock);
        mutex_destroy(&os->os_obj_lock);
        mutex_destroy(&os->os_user_ptr_lock);
+       mutex_destroy(&os->os_upgrade_lock);
        for (int i = 0; i < TXG_SIZE; i++) {
                multilist_destroy(os->os_dirty_dnodes[i]);
        }
index e7046b7861d4b814149402a5898f015f6c1f7af3..258e626faac9dc1e0c28b9dea06ec0aede034211 100644 (file)
@@ -120,6 +120,7 @@ dsl_deadlist_close(dsl_deadlist_t *dl)
        dsl_deadlist_entry_t *dle;
 
        dl->dl_os = NULL;
+       mutex_destroy(&dl->dl_lock);
 
        if (dl->dl_oldfmt) {
                dl->dl_oldfmt = B_FALSE;
@@ -136,7 +137,6 @@ dsl_deadlist_close(dsl_deadlist_t *dl)
                avl_destroy(&dl->dl_tree);
        }
        dmu_buf_rele(dl->dl_dbuf, dl);
-       mutex_destroy(&dl->dl_lock);
        dl->dl_dbuf = NULL;
        dl->dl_phys = NULL;
 }
index eb3e6eeb379c89145bb7184e6569ed661602d8ad..c98938f3cdffeed58222965ad1b206fd4d585fd0 100644 (file)
@@ -348,6 +348,7 @@ dsl_pool_close(dsl_pool_t *dp)
 
        rrw_destroy(&dp->dp_config_rwlock);
        mutex_destroy(&dp->dp_lock);
+       cv_destroy(&dp->dp_spaceavail_cv);
        taskq_destroy(dp->dp_iput_taskq);
        if (dp->dp_blkstats)
                vmem_free(dp->dp_blkstats, sizeof (zfs_all_blkstats_t));
index dfb1ef522868976cb34647d14c65ce0604df60cd..3b2ba8e259c7b5bce8eae864d72709e72fac864b 100644 (file)
@@ -710,6 +710,9 @@ vdev_free(vdev_t *vd)
        mutex_destroy(&vd->vdev_stat_lock);
        mutex_destroy(&vd->vdev_probe_lock);
 
+       zfs_ratelimit_fini(&vd->vdev_delay_rl);
+       zfs_ratelimit_fini(&vd->vdev_checksum_rl);
+
        if (vd == spa->spa_root_vdev)
                spa->spa_root_vdev = NULL;
 
index 435278c6e67e23120b2ad8d8e5d8fc71fa8e7692..ee9962bff394ecdea140ffc4e7119a740d1f5ac7 100644 (file)
@@ -84,7 +84,7 @@ fzap_upgrade(zap_t *zap, dmu_tx_t *tx, zap_flags_t flags)
        zap->zap_dbu.dbu_evict_func_sync = zap_evict_sync;
        zap->zap_dbu.dbu_evict_func_async = NULL;
 
-       mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, 0, 0);
+       mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, MUTEX_DEFAULT, 0);
        zap->zap_f.zap_block_shift = highbit64(zap->zap_dbuf->db_size) - 1;
 
        zp = zap_f_phys(zap);
index 28c80e5493dad92737661479341b183fc053d759..2cb9f42ae08b84dce8045d2b3047d6aa5e3f380c 100644 (file)
@@ -404,7 +404,8 @@ mzap_open(objset_t *os, uint64_t obj, dmu_buf_t *db)
        zap->zap_dbuf = db;
 
        if (zap_block_type != ZBT_MICRO) {
-               mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, 0, 0);
+               mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, MUTEX_DEFAULT,
+                   0);
                zap->zap_f.zap_block_shift = highbit64(db->db_size) - 1;
                if (zap_block_type != ZBT_HEADER || zap_magic != ZAP_MAGIC) {
                        winner = NULL;  /* No actual winner here... */
index 93437afb3b4c1cd96b04087d801b465eec18464a..52262166866b3d2d15eaca66b04c0bffbd991b44 100644 (file)
@@ -1913,6 +1913,8 @@ zfs_create_fs(objset_t *os, cred_t *cr, nvlist_t *zplprops, dmu_tx_t *tx)
                mutex_destroy(&zfsvfs->z_hold_locks[i]);
        }
 
+       mutex_destroy(&zfsvfs->z_znodes_lock);
+
        vmem_free(zfsvfs->z_hold_trees, sizeof (avl_tree_t) * size);
        vmem_free(zfsvfs->z_hold_locks, sizeof (kmutex_t) * size);
        kmem_free(sb, sizeof (struct super_block));