--- uts/common/fs/zfs/arc.c 2007/03/26 23:55:17 +++ uts/common/fs/zfs/arc.c 2007/03/29 16:27:47 @@ -865,6 +865,7 @@ hdr->b_spa = spa; hdr->b_state = arc_anon; hdr->b_arc_access = 0; + mutex_init(&hdr->b_freeze_lock, NULL, MUTEX_DEFAULT, NULL); buf = kmem_cache_alloc(buf_cache, KM_SLEEP); buf->b_hdr = hdr; buf->b_data = NULL; @@ -1023,6 +1024,7 @@ kmem_free(hdr->b_freeze_cksum, sizeof (zio_cksum_t)); hdr->b_freeze_cksum = NULL; } + mutex_destroy(&hdr->b_freeze_lock); ASSERT(!list_link_active(&hdr->b_arc_node)); ASSERT3P(hdr->b_hash_next, ==, NULL); @@ -2756,6 +2758,7 @@ { mutex_enter(&arc_reclaim_thr_lock); arc_thread_exit = 1; + cv_signal(&arc_reclaim_thr_cv); while (arc_thread_exit != 0) cv_wait(&arc_reclaim_thr_cv, &arc_reclaim_thr_lock); mutex_exit(&arc_reclaim_thr_lock); --- uts/common/fs/zfs/dnode.c 2007/03/23 22:21:27 +++ uts/common/fs/zfs/dnode.c 2007/03/29 16:59:44 @@ -55,6 +55,7 @@ dnode_t *dn = arg; bzero(dn, sizeof (dnode_t)); + cv_init(&dn->dn_notxholds, NULL, CV_DEFAULT, NULL); rw_init(&dn->dn_struct_rwlock, NULL, RW_DEFAULT, NULL); mutex_init(&dn->dn_mtx, NULL, MUTEX_DEFAULT, NULL); mutex_init(&dn->dn_dbufs_mtx, NULL, MUTEX_DEFAULT, NULL); @@ -83,6 +84,7 @@ int i; dnode_t *dn = arg; + cv_destroy(&dn->dn_notxholds); rw_destroy(&dn->dn_struct_rwlock); mutex_destroy(&dn->dn_mtx); mutex_destroy(&dn->dn_dbufs_mtx); --- uts/common/fs/zfs/spa.c 2007/03/28 23:25:51 +++ uts/common/fs/zfs/spa.c 2007/03/29 16:59:44 @@ -129,12 +129,11 @@ 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_uberblock_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); + cv_init(&spa->spa_config_lock.scl_cv, NULL, CV_DEFAULT, NULL); mutex_init(&spa->spa_sync_bplist.bpl_lock, NULL, MUTEX_DEFAULT, NULL); mutex_init(&spa->spa_history_lock, NULL, MUTEX_DEFAULT, NULL); mutex_init(&spa->spa_props_lock, NULL, MUTEX_DEFAULT, NULL); @@ -171,8 +170,6 @@ list_destroy(&spa->spa_dirty_list); - rw_destroy(&spa->spa_traverse_lock); - for (t = 0; t < ZIO_TYPES; t++) { taskq_destroy(spa->spa_zio_issue_taskq[t]); taskq_destroy(spa->spa_zio_intr_taskq[t]); @@ -192,6 +189,16 @@ avl_destroy(&spa->spa_errlist_scrub); avl_destroy(&spa->spa_errlist_last); + rw_destroy(&spa->spa_traverse_lock); + mutex_destroy(&spa->spa_uberblock_lock); + mutex_destroy(&spa->spa_errlog_lock); + mutex_destroy(&spa->spa_errlist_lock); + mutex_destroy(&spa->spa_config_lock.scl_lock); + cv_destroy(&spa->spa_config_lock.scl_cv); + mutex_destroy(&spa->spa_sync_bplist.bpl_lock); + mutex_destroy(&spa->spa_history_lock); + mutex_destroy(&spa->spa_props_lock); + spa->spa_state = POOL_STATE_UNINITIALIZED; } --- uts/common/fs/zfs/spa_misc.c 2007/03/28 23:25:51 +++ uts/common/fs/zfs/spa_misc.c 2007/03/29 16:59:44 @@ -239,6 +239,14 @@ spa->spa_freeze_txg = UINT64_MAX; spa->spa_final_txg = UINT64_MAX; + mutex_init(&spa->spa_config_cache_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_async_lock, NULL, MUTEX_DEFAULT, NULL); + mutex_init(&spa->spa_scrub_lock, NULL, MUTEX_DEFAULT, NULL); + + cv_init(&spa->spa_scrub_cv, NULL, CV_DEFAULT, NULL); + cv_init(&spa->spa_scrub_io_cv, NULL, CV_DEFAULT, NULL); + cv_init(&spa->spa_async_cv, NULL, CV_DEFAULT, NULL); + refcount_create(&spa->spa_refcount); refcount_create(&spa->spa_config_lock.scl_count); @@ -283,15 +291,13 @@ 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); + cv_destroy(&spa->spa_async_cv); + cv_destroy(&spa->spa_scrub_io_cv); + cv_destroy(&spa->spa_scrub_cv); + mutex_destroy(&spa->spa_scrub_lock); + mutex_destroy(&spa->spa_async_lock); mutex_destroy(&spa->spa_config_cache_lock); - mutex_destroy(&spa->spa_async_lock); - mutex_destroy(&spa->spa_history_lock); - mutex_destroy(&spa->spa_props_lock); kmem_free(spa, sizeof (spa_t)); } @@ -1086,6 +1092,8 @@ avl_create(&spa_namespace_avl, spa_name_compare, sizeof (spa_t), offsetof(spa_t, spa_avl)); + mutex_init(&spa_spare_lock, NULL, MUTEX_DEFAULT, NULL); + avl_create(&spa_spare_avl, spa_spare_compare, sizeof (spa_spare_t), offsetof(spa_spare_t, spare_avl)); @@ -1114,4 +1122,5 @@ cv_destroy(&spa_namespace_cv); mutex_destroy(&spa_namespace_lock); + mutex_destroy(&spa_spare_lock); } --- uts/common/fs/zfs/space_map.c 2007/03/05 09:31:11 +++ uts/common/fs/zfs/space_map.c 2007/03/29 16:59:44 @@ -60,6 +60,7 @@ { bzero(sm, sizeof (*sm)); + cv_init(&sm->sm_load_cv, NULL, CV_DEFAULT, NULL); avl_create(&sm->sm_root, space_map_seg_compare, sizeof (space_seg_t), offsetof(struct space_seg, ss_node)); @@ -75,6 +76,7 @@ ASSERT(!sm->sm_loaded && !sm->sm_loading); VERIFY3U(sm->sm_space, ==, 0); avl_destroy(&sm->sm_root); + cv_destroy(&sm->sm_load_cv); } void --- uts/common/fs/zfs/txg.c 2006/11/30 23:46:44 +++ uts/common/fs/zfs/txg.c 2007/03/29 16:59:44 @@ -48,16 +48,25 @@ txg_init(dsl_pool_t *dp, uint64_t txg) { tx_state_t *tx = &dp->dp_tx; - int c; + int c, i; 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++) + for (c = 0; c < max_ncpus; c++) { mutex_init(&tx->tx_cpu[c].tc_lock, NULL, MUTEX_DEFAULT, NULL); + for (i = 0; i < TXG_SIZE; i++) + cv_init(&tx->tx_cpu[c].tc_cv[i], NULL, CV_DEFAULT, NULL); + } rw_init(&tx->tx_suspend, NULL, RW_DEFAULT, NULL); mutex_init(&tx->tx_sync_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&tx->tx_sync_more_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_sync_done_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_quiesce_more_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_quiesce_done_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_timeout_exit_cv, NULL, CV_DEFAULT, NULL); + cv_init(&tx->tx_exit_cv, NULL, CV_DEFAULT, NULL); tx->tx_open_txg = txg; } @@ -69,15 +78,24 @@ txg_fini(dsl_pool_t *dp) { tx_state_t *tx = &dp->dp_tx; - int c; + int c, i; ASSERT(tx->tx_threads == 0); + cv_destroy(&tx->tx_exit_cv); + cv_destroy(&tx->tx_timeout_exit_cv); + cv_destroy(&tx->tx_quiesce_done_cv); + cv_destroy(&tx->tx_quiesce_more_cv); + cv_destroy(&tx->tx_sync_done_cv); + cv_destroy(&tx->tx_sync_more_cv); rw_destroy(&tx->tx_suspend); mutex_destroy(&tx->tx_sync_lock); - for (c = 0; c < max_ncpus; c++) + for (c = 0; c < max_ncpus; c++) { + for (i = 0; i < TXG_SIZE; i++) + cv_destroy(&tx->tx_cpu[c].tc_cv[i]); mutex_destroy(&tx->tx_cpu[c].tc_lock); + } kmem_free(tx->tx_cpu, max_ncpus * sizeof (tx_cpu_t)); --- uts/common/fs/zfs/zap.c 2006/11/30 23:46:44 +++ uts/common/fs/zfs/zap.c 2007/03/29 16:59:44 @@ -84,7 +84,7 @@ (void) dmu_buf_update_user(zap->zap_dbuf, zap, zap, &zap->zap_f.zap_phys, zap_evict); - mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, 0, 0); + mutex_init(&zap->zap_f.zap_num_entries_mtx, NULL, MUTEX_DEFAULT, 0); zap->zap_f.zap_block_shift = highbit(zap->zap_dbuf->db_size) - 1; zp = zap->zap_f.zap_phys; @@ -386,7 +386,7 @@ ASSERT(RW_WRITE_HELD(&zap->zap_rwlock)); - rw_init(&l->l_rwlock, 0, 0, 0); + rw_init(&l->l_rwlock, NULL, RW_DEFAULT, 0); rw_enter(&l->l_rwlock, RW_WRITER); l->l_blkid = zap_allocate_blocks(zap, 1); l->l_dbuf = NULL; @@ -444,7 +444,7 @@ ASSERT(blkid != 0); l = kmem_alloc(sizeof (zap_leaf_t), KM_SLEEP); - rw_init(&l->l_rwlock, 0, 0, 0); + rw_init(&l->l_rwlock, NULL, RW_DEFAULT, 0); rw_enter(&l->l_rwlock, RW_WRITER); l->l_blkid = blkid; l->l_bs = highbit(db->db_size)-1; --- uts/common/fs/zfs/zap_micro.c 2006/11/30 23:46:44 +++ uts/common/fs/zfs/zap_micro.c 2007/03/29 16:59:44 @@ -187,14 +187,15 @@ ASSERT3U(MZAP_ENT_LEN, ==, sizeof (mzap_ent_phys_t)); zap = kmem_zalloc(sizeof (zap_t), KM_SLEEP); - rw_init(&zap->zap_rwlock, 0, 0, 0); + rw_init(&zap->zap_rwlock, NULL, RW_DEFAULT, 0); rw_enter(&zap->zap_rwlock, RW_WRITER); zap->zap_objset = os; zap->zap_object = obj; zap->zap_dbuf = db; if (((uint64_t *)db->db_data)[0] != ZBT_MICRO) { - mutex_init(&zap->zap_f.zap_num_entries_mtx, 0, 0, 0); + mutex_init(&zap->zap_f.zap_num_entries_mtx, NULL, + MUTEX_DEFAULT, 0); zap->zap_f.zap_block_shift = highbit(db->db_size) - 1; } else { zap->zap_ismicro = TRUE; @@ -208,6 +209,8 @@ winner = dmu_buf_set_user(db, zap, &zap->zap_m.zap_phys, zap_evict); if (winner != NULL) { + if (!zap->zap_ismicro) + mutex_destroy(&zap->zap_f.zap_num_entries_mtx); kmem_free(zap, sizeof (zap_t)); return (winner); } @@ -465,6 +468,8 @@ if (zap->zap_ismicro) mze_destroy(zap); + else + mutex_destroy(&zap->zap_f.zap_num_entries_mtx); kmem_free(zap, sizeof (zap_t)); } --- uts/common/fs/zfs/zfs_fm.c 2006/11/30 23:46:44 +++ uts/common/fs/zfs/zfs_fm.c 2006/12/02 08:14:18 @@ -221,7 +221,7 @@ if (pvd->vdev_path) fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_PARENT_PATH, - DATA_TYPE_STRING, vd->vdev_path, NULL); + DATA_TYPE_STRING, pvd->vdev_path, NULL); if (pvd->vdev_devid) fm_payload_set(ereport, FM_EREPORT_PAYLOAD_ZFS_PARENT_DEVID, @@ -261,14 +261,11 @@ */ if (zio->io_logical != NULL) fm_payload_set(ereport, - FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJSET, - DATA_TYPE_UINT64, - zio->io_logical->io_bookmark.zb_objset, FM_EREPORT_PAYLOAD_ZFS_ZIO_OBJECT, DATA_TYPE_UINT64, zio->io_logical->io_bookmark.zb_object, FM_EREPORT_PAYLOAD_ZFS_ZIO_LEVEL, - DATA_TYPE_INT32, + DATA_TYPE_INT64, zio->io_logical->io_bookmark.zb_level, FM_EREPORT_PAYLOAD_ZFS_ZIO_BLKID, DATA_TYPE_UINT64, --- uts/common/fs/zfs/zfs_rlock.c 2007/03/05 09:31:11 +++ uts/common/fs/zfs/zfs_rlock.c 2007/03/29 16:27:47 @@ -529,10 +529,14 @@ /* writer locks can't be shared or split */ avl_remove(&zp->z_range_avl, rl); mutex_exit(&zp->z_range_lock); - if (rl->r_write_wanted) + if (rl->r_write_wanted) { cv_broadcast(&rl->r_wr_cv); - if (rl->r_read_wanted) + cv_destroy(&rl->r_wr_cv); + } + if (rl->r_read_wanted) { cv_broadcast(&rl->r_rd_cv); + cv_destroy(&rl->r_rd_cv); + } kmem_free(rl, sizeof (rl_t)); } else { /* --- uts/common/fs/zfs/zfs_vfsops.c 2007/03/28 23:25:51 +++ uts/common/fs/zfs/zfs_vfsops.c 2007/03/29 16:27:47 @@ -645,6 +645,9 @@ if (error) { if (zfsvfs->z_os) dmu_objset_close(zfsvfs->z_os); + rw_destroy(&zfsvfs->z_um_lock); + mutex_destroy(&zfsvfs->z_znodes_lock); + mutex_destroy(&zfsvfs->z_delete_head.z_mutex); kmem_free(zfsvfs, sizeof (zfsvfs_t)); } else { atomic_add_32(&zfs_active_fs_count, 1); @@ -1226,7 +1229,13 @@ zfs_freevfs(vfs_t *vfsp) { zfsvfs_t *zfsvfs = vfsp->vfs_data; + int i; + for (i = 0; i != ZFS_OBJ_MTX_SZ; i++) + mutex_destroy(&zfsvfs->z_hold_mtx[i]); + rw_destroy(&zfsvfs->z_um_lock); + mutex_destroy(&zfsvfs->z_znodes_lock); + mutex_destroy(&zfsvfs->z_delete_head.z_mutex); kmem_free(zfsvfs, sizeof (zfsvfs_t)); atomic_add_32(&zfs_active_fs_count, -1); --- uts/common/fs/zfs/zfs_znode.c 2007/03/27 14:32:57 +++ uts/common/fs/zfs/zfs_znode.c 2007/03/29 16:27:47 @@ -121,6 +121,7 @@ rw_destroy(&zp->z_parent_lock); rw_destroy(&zp->z_name_lock); mutex_destroy(&zp->z_acl_lock); + mutex_destroy(&zp->z_range_lock); avl_destroy(&zp->z_range_avl); ASSERT(zp->z_dbuf_held == 0); --- uts/common/fs/zfs/zil.c 2007/03/20 17:22:47 +++ uts/common/fs/zfs/zil.c 2007/03/29 16:59:44 @@ -1188,6 +1188,8 @@ zilog->zl_destroy_txg = TXG_INITIAL - 1; mutex_init(&zilog->zl_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&zilog->zl_cv_writer, NULL, CV_DEFAULT, NULL); + cv_init(&zilog->zl_cv_suspend, NULL, CV_DEFAULT, NULL); list_create(&zilog->zl_itx_list, sizeof (itx_t), offsetof(itx_t, itx_node)); @@ -1225,6 +1227,8 @@ ASSERT(list_head(&zilog->zl_itx_list) == NULL); list_destroy(&zilog->zl_itx_list); + cv_destroy(&zilog->zl_cv_suspend); + cv_destroy(&zilog->zl_cv_writer); mutex_destroy(&zilog->zl_lock); kmem_free(zilog, sizeof (zilog_t)); --- uts/common/fs/zfs/zio.c 2007/03/23 22:21:27 +++ uts/common/fs/zfs/zio.c 2007/03/29 16:59:44 @@ -322,6 +322,7 @@ zio->io_timestamp = lbolt64; zio->io_flags = flags; mutex_init(&zio->io_lock, NULL, MUTEX_DEFAULT, NULL); + cv_init(&zio->io_cv, NULL, CV_DEFAULT, NULL); zio_push_transform(zio, data, size, size); /* @@ -748,6 +749,7 @@ mutex_exit(&zio->io_lock); error = zio->io_error; + cv_destroy(&zio->io_cv); mutex_destroy(&zio->io_lock); kmem_free(zio, sizeof (zio_t)); --- uts/common/fs/zfs/zvol.c 2007/03/26 23:55:17 +++ uts/common/fs/zfs/zvol.c 2007/03/29 16:27:47 @@ -500,6 +500,7 @@ zv->zv_objset = NULL; avl_destroy(&zv->zv_znode.z_range_avl); mutex_destroy(&zv->zv_znode.z_range_lock); + rw_destroy(&zv->zv_dslock); ddi_soft_state_free(zvol_state, zv->zv_minor);