Illumos 4975 - missing mutex_destroy() calls in zfs
4975 missing mutex_destroy() calls in zfs Author: Jorgen Lundman <lundman@lundman.net> Reviewed by: Matthew Ahrens <matthew.ahrens@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Rich Lowe <richlowe@richlowe.net> Reviewed by: Seth Nimbosa <darth.Serious@gmail.com> Reviewed by: Dan McDonald <danmcd@omniti.com> Reviewed by: Don Brady <dev.fs.zfs@gmail.com> Approved by: Dan McDonald <danmcd@omniti.com> References: https://www.illumos.org/issues/4975 https://github.com/illumos/illumos-gate/commit/d2b3cbb Ported-by: Chris Dunlop <chris@onthe.net.au> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
This commit is contained in:
parent
ca227e54a8
commit
58c4aa00c6
|
@ -1423,6 +1423,12 @@ dbuf_undirty(dmu_buf_impl_t *db, dmu_tx_t *tx)
|
||||||
if (dr->dt.dl.dr_data != db->db_buf)
|
if (dr->dt.dl.dr_data != db->db_buf)
|
||||||
VERIFY(arc_buf_remove_ref(dr->dt.dl.dr_data, db));
|
VERIFY(arc_buf_remove_ref(dr->dt.dl.dr_data, db));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (db->db_level != 0) {
|
||||||
|
mutex_destroy(&dr->dt.di.dr_mtx);
|
||||||
|
list_destroy(&dr->dt.di.dr_children);
|
||||||
|
}
|
||||||
|
|
||||||
kmem_free(dr, sizeof (dbuf_dirty_record_t));
|
kmem_free(dr, sizeof (dbuf_dirty_record_t));
|
||||||
|
|
||||||
ASSERT(db->db_dirtycnt > 0);
|
ASSERT(db->db_dirtycnt > 0);
|
||||||
|
|
|
@ -1079,6 +1079,11 @@ dnode_hold_impl(objset_t *os, uint64_t object, int flag,
|
||||||
}
|
}
|
||||||
if ((winner = dmu_buf_set_user(&db->db, children_dnodes, NULL,
|
if ((winner = dmu_buf_set_user(&db->db, children_dnodes, NULL,
|
||||||
dnode_buf_pageout))) {
|
dnode_buf_pageout))) {
|
||||||
|
|
||||||
|
for (i = 0; i < epb; i++) {
|
||||||
|
zrl_destroy(&dnh[i].dnh_zrlock);
|
||||||
|
}
|
||||||
|
|
||||||
kmem_free(children_dnodes, sizeof (dnode_children_t) +
|
kmem_free(children_dnodes, sizeof (dnode_children_t) +
|
||||||
(epb - 1) * sizeof (dnode_handle_t));
|
(epb - 1) * sizeof (dnode_handle_t));
|
||||||
children_dnodes = winner;
|
children_dnodes = winner;
|
||||||
|
|
|
@ -491,6 +491,9 @@ dnode_undirty_dbufs(list_t *list)
|
||||||
ASSERT(db->db_blkid == DMU_BONUS_BLKID ||
|
ASSERT(db->db_blkid == DMU_BONUS_BLKID ||
|
||||||
dr->dt.dl.dr_data == db->db_buf);
|
dr->dt.dl.dr_data == db->db_buf);
|
||||||
dbuf_unoverride(dr);
|
dbuf_unoverride(dr);
|
||||||
|
} else {
|
||||||
|
mutex_destroy(&dr->dt.di.dr_mtx);
|
||||||
|
list_destroy(&dr->dt.di.dr_children);
|
||||||
}
|
}
|
||||||
kmem_free(dr, sizeof (dbuf_dirty_record_t));
|
kmem_free(dr, sizeof (dbuf_dirty_record_t));
|
||||||
dbuf_rele_and_unlock(db, (void *)(uintptr_t)txg);
|
dbuf_rele_and_unlock(db, (void *)(uintptr_t)txg);
|
||||||
|
|
|
@ -267,6 +267,7 @@ dsl_dataset_evict(dmu_buf_t *db, void *dsv)
|
||||||
|
|
||||||
mutex_destroy(&ds->ds_lock);
|
mutex_destroy(&ds->ds_lock);
|
||||||
mutex_destroy(&ds->ds_opening_lock);
|
mutex_destroy(&ds->ds_opening_lock);
|
||||||
|
mutex_destroy(&ds->ds_sendstream_lock);
|
||||||
refcount_destroy(&ds->ds_longholds);
|
refcount_destroy(&ds->ds_longholds);
|
||||||
|
|
||||||
kmem_free(ds, sizeof (dsl_dataset_t));
|
kmem_free(ds, sizeof (dsl_dataset_t));
|
||||||
|
@ -396,6 +397,7 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uint64_t dsobj, void *tag,
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
mutex_destroy(&ds->ds_lock);
|
mutex_destroy(&ds->ds_lock);
|
||||||
mutex_destroy(&ds->ds_opening_lock);
|
mutex_destroy(&ds->ds_opening_lock);
|
||||||
|
mutex_destroy(&ds->ds_sendstream_lock);
|
||||||
refcount_destroy(&ds->ds_longholds);
|
refcount_destroy(&ds->ds_longholds);
|
||||||
bplist_destroy(&ds->ds_pending_deadlist);
|
bplist_destroy(&ds->ds_pending_deadlist);
|
||||||
dsl_deadlist_close(&ds->ds_deadlist);
|
dsl_deadlist_close(&ds->ds_deadlist);
|
||||||
|
@ -452,6 +454,7 @@ dsl_dataset_hold_obj(dsl_pool_t *dp, uint64_t dsobj, void *tag,
|
||||||
dsl_dir_rele(ds->ds_dir, ds);
|
dsl_dir_rele(ds->ds_dir, ds);
|
||||||
mutex_destroy(&ds->ds_lock);
|
mutex_destroy(&ds->ds_lock);
|
||||||
mutex_destroy(&ds->ds_opening_lock);
|
mutex_destroy(&ds->ds_opening_lock);
|
||||||
|
mutex_destroy(&ds->ds_sendstream_lock);
|
||||||
refcount_destroy(&ds->ds_longholds);
|
refcount_destroy(&ds->ds_longholds);
|
||||||
kmem_free(ds, sizeof (dsl_dataset_t));
|
kmem_free(ds, sizeof (dsl_dataset_t));
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
|
|
|
@ -1112,6 +1112,9 @@ fail:
|
||||||
if (sa->sa_user_table)
|
if (sa->sa_user_table)
|
||||||
kmem_free(sa->sa_user_table, sa->sa_user_table_sz);
|
kmem_free(sa->sa_user_table, sa->sa_user_table_sz);
|
||||||
mutex_exit(&sa->sa_lock);
|
mutex_exit(&sa->sa_lock);
|
||||||
|
avl_destroy(&sa->sa_layout_hash_tree);
|
||||||
|
avl_destroy(&sa->sa_layout_num_tree);
|
||||||
|
mutex_destroy(&sa->sa_lock);
|
||||||
kmem_free(sa, sizeof (sa_os_t));
|
kmem_free(sa, sizeof (sa_os_t));
|
||||||
return ((error == ECKSUM) ? EIO : error);
|
return ((error == ECKSUM) ? EIO : error);
|
||||||
}
|
}
|
||||||
|
@ -1148,6 +1151,7 @@ sa_tear_down(objset_t *os)
|
||||||
|
|
||||||
avl_destroy(&sa->sa_layout_hash_tree);
|
avl_destroy(&sa->sa_layout_hash_tree);
|
||||||
avl_destroy(&sa->sa_layout_num_tree);
|
avl_destroy(&sa->sa_layout_num_tree);
|
||||||
|
mutex_destroy(&sa->sa_lock);
|
||||||
|
|
||||||
kmem_free(sa, sizeof (sa_os_t));
|
kmem_free(sa, sizeof (sa_os_t));
|
||||||
os->os_sa = NULL;
|
os->os_sa = NULL;
|
||||||
|
|
Loading…
Reference in New Issue