--- uts/common/fs/zfs/arc.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/arc.c 2006/08/21 20:18:02 @@ -2445,6 +2445,12 @@ arc.mfu_ghost = &ARC_mfu_ghost; arc.size = 0; + mutex_init(&arc.anon->mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc.mru->mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc.mru_ghost->mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc.mfu->mtx, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&arc.mfu_ghost->mtx, NULL, MUTEX_DEFAULT, NULL); + list_create(&arc.mru->list, sizeof (arc_buf_hdr_t), offsetof(arc_buf_hdr_t, b_arc_node)); list_create(&arc.mru_ghost->list, sizeof (arc_buf_hdr_t), @@ -2487,5 +2494,11 @@ list_destroy(&arc.mfu->list); list_destroy(&arc.mfu_ghost->list); + mutex_destroy(&arc.anon->mtx); + mutex_destroy(&arc.mru->mtx); + mutex_destroy(&arc.mru_ghost->mtx); + mutex_destroy(&arc.mfu->mtx); + mutex_destroy(&arc.mfu_ghost->mtx); + buf_fini(); } --- uts/common/fs/zfs/dmu_objset.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/dmu_objset.c 2006/08/21 20:46:35 @@ -214,6 +214,9 @@ list_create(&osi->os_downgraded_dbufs, sizeof (dmu_buf_impl_t), offsetof(dmu_buf_impl_t, db_link)); + mutex_init(&osi->os_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&osi->os_obj_lock, NULL, MUTEX_DEFAULT, NULL); + osi->os_meta_dnode = dnode_special_open(osi, &osi->os_phys->os_meta_dnode, DMU_META_DNODE_OBJECT); @@ -361,6 +364,8 @@ zil_free(osi->os_zil); zio_buf_free(osi->os_phys, sizeof (objset_phys_t)); + mutex_destroy(&osi->os_lock); + mutex_destroy(&osi->os_obj_lock); kmem_free(osi, sizeof (objset_impl_t)); } --- uts/common/fs/zfs/dsl_dataset.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/dsl_dataset.c 2006/08/21 20:46:35 @@ -231,6 +231,9 @@ if (list_link_active(&ds->ds_synced_link)) list_remove(&dp->dp_synced_objsets, ds); + mutex_destroy(&ds->ds_lock); + mutex_destroy(&ds->ds_deadlist.bpl_lock); + kmem_free(ds, sizeof (dsl_dataset_t)); } @@ -283,6 +286,9 @@ ds->ds_dbuf = dbuf; ds->ds_object = dsobj; ds->ds_phys = dbuf->db_data; + mutex_init(&ds->ds_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&ds->ds_deadlist.bpl_lock, NULL, MUTEX_DEFAULT, + NULL); err = bplist_open(&ds->ds_deadlist, mos, ds->ds_phys->ds_deadlist_obj); @@ -295,6 +301,8 @@ * we don't really need to close the blist if we * just opened it. */ + mutex_destroy(&ds->ds_lock); + mutex_destroy(&ds->ds_deadlist.bpl_lock); kmem_free(ds, sizeof (dsl_dataset_t)); dmu_buf_rele(dbuf, tag); return (err); @@ -343,6 +351,8 @@ DS_MODE_NONE, ds); } dsl_dir_close(ds->ds_dir, ds); + mutex_destroy(&ds->ds_lock); + mutex_destroy(&ds->ds_deadlist.bpl_lock); kmem_free(ds, sizeof (dsl_dataset_t)); if (err) { dmu_buf_rele(dbuf, tag); --- uts/common/fs/zfs/dsl_dir.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/dsl_dir.c 2006/08/21 20:46:35 @@ -70,6 +70,7 @@ * dir open. */ list_destroy(&dd->dd_prop_cbs); + mutex_destroy(&dd->dd_lock); kmem_free(dd, sizeof (dsl_dir_t)); } @@ -106,6 +107,7 @@ dd->dd_pool = dp; dd->dd_phys = dbuf->db_data; dd->dd_used_bytes = dd->dd_phys->dd_used_bytes; + mutex_init(&dd->dd_lock, NULL, MUTEX_DEFAULT, NULL); list_create(&dd->dd_prop_cbs, sizeof (dsl_prop_cb_record_t), offsetof(dsl_prop_cb_record_t, cbr_node)); @@ -114,6 +116,7 @@ err = dsl_dir_open_obj(dp, dd->dd_phys->dd_parent_obj, NULL, dd, &dd->dd_parent); if (err) { + mutex_destroy(&dd->dd_lock); kmem_free(dd, sizeof (dsl_dir_t)); dmu_buf_rele(dbuf, tag); return (err); @@ -137,6 +140,7 @@ } if (err) { dsl_dir_close(dd->dd_parent, dd); + mutex_destroy(&dd->dd_lock); kmem_free(dd, sizeof (dsl_dir_t)); dmu_buf_rele(dbuf, tag); return (err); @@ -150,6 +154,7 @@ if (winner) { if (dd->dd_parent) dsl_dir_close(dd->dd_parent, dd); + mutex_destroy(&dd->dd_lock); kmem_free(dd, sizeof (dsl_dir_t)); dd = winner; } else { --- uts/common/fs/zfs/dsl_pool.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/dsl_pool.c 2006/08/21 20:46:35 @@ -60,6 +60,7 @@ dp = kmem_zalloc(sizeof (dsl_pool_t), KM_SLEEP); dp->dp_spa = spa; dp->dp_meta_rootbp = *bp; + rw_init(&dp->dp_config_rwlock, NULL, RW_DEFAULT, NULL); txg_init(dp, txg); txg_list_create(&dp->dp_dirty_datasets, @@ -131,6 +132,7 @@ arc_flush(); txg_fini(dp); + rw_destroy(&dp->dp_config_rwlock); kmem_free(dp, sizeof (dsl_pool_t)); } --- uts/common/fs/zfs/metaslab.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/metaslab.c 2006/08/21 20:46:35 @@ -293,6 +293,7 @@ metaslab_t *msp; msp = kmem_zalloc(sizeof (metaslab_t), KM_SLEEP); + mutex_init(&msp->ms_lock, NULL, MUTEX_DEFAULT, NULL); msp->ms_smo_syncing = *smo; @@ -355,6 +356,7 @@ } mutex_exit(&msp->ms_lock); + mutex_destroy(&msp->ms_lock); kmem_free(msp, sizeof (metaslab_t)); } --- uts/common/fs/zfs/spa.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/spa.c 2006/08/21 20:46:35 @@ -123,6 +123,13 @@ } rw_init(&spa->spa_traverse_lock, NULL, RW_DEFAULT, NULL); + mutex_init(&spa->spa_async_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_config_cache_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_scrub_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_errlog_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_errlist_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_config_lock.scl_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_sync_bplist.bpl_lock, NULL, MUTEX_DEFAULT, NULL); list_create(&spa->spa_dirty_list, sizeof (vdev_t), offsetof(vdev_t, vdev_dirty_node)); --- uts/common/fs/zfs/spa_misc.c 2006/06/26 23:37:00 +++ uts/common/fs/zfs/spa_misc.c 2006/08/21 20:46:35 @@ -276,6 +276,14 @@ refcount_destroy(&spa->spa_refcount); refcount_destroy(&spa->spa_config_lock.scl_count); + mutex_destroy(&spa->spa_sync_bplist.bpl_lock); + mutex_destroy(&spa->spa_config_lock.scl_lock); + mutex_destroy(&spa->spa_errlist_lock); + mutex_destroy(&spa->spa_errlog_lock); + mutex_destroy(&spa->spa_scrub_lock); + mutex_destroy(&spa->spa_config_cache_lock); + mutex_destroy(&spa->spa_async_lock); + kmem_free(spa, sizeof (spa_t)); } --- uts/common/fs/zfs/txg.c 2006/04/09 09:30:01 +++ uts/common/fs/zfs/txg.c 2006/08/21 20:46:35 @@ -49,12 +49,16 @@ txg_init(dsl_pool_t *dp, uint64_t txg) { tx_state_t *tx = &dp->dp_tx; + int c; bzero(tx, sizeof (tx_state_t)); tx->tx_cpu = kmem_zalloc(max_ncpus * sizeof (tx_cpu_t), KM_SLEEP); + for (c = 0; c < max_ncpus; c++) + mutex_init(&tx->tx_cpu[c].tc_lock, NULL, MUTEX_DEFAULT, NULL); rw_init(&tx->tx_suspend, NULL, RW_DEFAULT, NULL); + mutex_init(&tx->tx_sync_lock, NULL, MUTEX_DEFAULT, NULL); tx->tx_open_txg = txg; } @@ -66,10 +70,15 @@ txg_fini(dsl_pool_t *dp) { tx_state_t *tx = &dp->dp_tx; + int c; ASSERT(tx->tx_threads == 0); rw_destroy(&tx->tx_suspend); + mutex_destroy(&tx->tx_sync_lock); + + for (c = 0; c < max_ncpus; c++) + mutex_destroy(&tx->tx_cpu[c].tc_lock); kmem_free(tx->tx_cpu, max_ncpus * sizeof (tx_cpu_t)); --- uts/common/fs/zfs/unique.c 2006/04/09 09:30:01 +++ uts/common/fs/zfs/unique.c 2006/08/21 20:46:35 @@ -31,7 +31,7 @@ #include static avl_tree_t unique_avl; -static kmutex_t unique_mtx; +static kmutex_t unique_mtx; /* XXX: Lock never initialized. */ typedef struct unique { avl_node_t un_link; --- uts/common/fs/zfs/vdev.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/vdev.c 2006/08/21 20:46:35 @@ -302,6 +302,7 @@ vd->vdev_state = VDEV_STATE_CLOSED; mutex_init(&vd->vdev_dtl_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&vd->vdev_stat_lock, NULL, MUTEX_DEFAULT, NULL); space_map_create(&vd->vdev_dtl_map, 0, -1ULL, 0, &vd->vdev_dtl_lock); space_map_create(&vd->vdev_dtl_scrub, 0, -1ULL, 0, &vd->vdev_dtl_lock); txg_list_create(&vd->vdev_ms_list, @@ -338,6 +339,7 @@ space_map_destroy(&vd->vdev_dtl_scrub); mutex_exit(&vd->vdev_dtl_lock); mutex_destroy(&vd->vdev_dtl_lock); + mutex_destroy(&vd->vdev_stat_lock); if (vd == spa->spa_root_vdev) spa->spa_root_vdev = NULL; --- uts/common/fs/zfs/zfs_znode.c 2006/06/26 23:37:00 +++ uts/common/fs/zfs/zfs_znode.c 2006/08/21 20:46:35 @@ -323,6 +323,8 @@ */ list_create(&zfsvfs->z_delete_head.z_znodes, sizeof (znode_t), offsetof(znode_t, z_list_node)); + /* XXX: Mutex never destroyed. */ + mutex_init(&zfsvfs->z_delete_head.z_mutex, NULL, MUTEX_DEFAULT, NULL); return (0); } --- uts/common/fs/zfs/zil.c 2006/08/03 03:39:14 +++ uts/common/fs/zfs/zil.c 2006/08/21 20:46:35 @@ -1114,6 +1114,8 @@ zilog->zl_dmu_pool = dmu_objset_pool(os); zilog->zl_destroy_txg = TXG_INITIAL - 1; + mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); + list_create(&zilog->zl_itx_list, sizeof (itx_t), offsetof(itx_t, itx_node)); @@ -1151,6 +1153,8 @@ ASSERT(list_head(&zilog->zl_itx_list) == NULL); list_destroy(&zilog->zl_itx_list); + mutex_destroy(&zilog->zl_lock); + kmem_free(zilog, sizeof (zilog_t)); } --- uts/common/fs/zfs/zio.c 2006/06/08 23:43:18 +++ uts/common/fs/zfs/zio.c 2006/08/21 20:46:35 @@ -258,6 +258,7 @@ zio->io_async_stages = ZIO_ASYNC_PIPELINE_STAGES; zio->io_timestamp = lbolt64; zio->io_flags = flags; + mutex_init(&zio->io_lock, NULL, MUTEX_DEFAULT, NULL); zio_push_transform(zio, data, size, size); if (pio == NULL) { @@ -654,6 +655,8 @@ error = zio->io_error; + mutex_destroy(&zio->io_lock); + kmem_free(zio, sizeof (zio_t)); return (error);