665 zfs_prop_to_name(ZFS_PROP_SYNC),
666 sync_changed_cb, os));
667 VERIFY0(dsl_prop_unregister(ds,
668 zfs_prop_to_name(ZFS_PROP_REDUNDANT_METADATA),
669 redundant_metadata_changed_cb, os));
670 VERIFY0(dsl_prop_unregister(ds,
671 zfs_prop_to_name(ZFS_PROP_RECORDSIZE),
672 recordsize_changed_cb, os));
673 }
674 VERIFY0(dsl_prop_unregister(ds,
675 zfs_prop_to_name(ZFS_PROP_PRIMARYCACHE),
676 primary_cache_changed_cb, os));
677 VERIFY0(dsl_prop_unregister(ds,
678 zfs_prop_to_name(ZFS_PROP_SECONDARYCACHE),
679 secondary_cache_changed_cb, os));
680 }
681
682 if (os->os_sa)
683 sa_tear_down(os);
684
685 os->os_evicting = B_TRUE;
686 dmu_objset_evict_dbufs(os);
687
688 mutex_enter(&os->os_lock);
689 spa_evicting_os_register(os->os_spa, os);
690 if (list_is_empty(&os->os_dnodes)) {
691 mutex_exit(&os->os_lock);
692 dmu_objset_evict_done(os);
693 } else {
694 mutex_exit(&os->os_lock);
695 }
696 }
697
698 void
699 dmu_objset_evict_done(objset_t *os)
700 {
701 ASSERT3P(list_head(&os->os_dnodes), ==, NULL);
702
703 dnode_special_close(&os->os_meta_dnode);
704 if (DMU_USERUSED_DNODE(os)) {
705 dnode_special_close(&os->os_userused_dnode);
|
665 zfs_prop_to_name(ZFS_PROP_SYNC),
666 sync_changed_cb, os));
667 VERIFY0(dsl_prop_unregister(ds,
668 zfs_prop_to_name(ZFS_PROP_REDUNDANT_METADATA),
669 redundant_metadata_changed_cb, os));
670 VERIFY0(dsl_prop_unregister(ds,
671 zfs_prop_to_name(ZFS_PROP_RECORDSIZE),
672 recordsize_changed_cb, os));
673 }
674 VERIFY0(dsl_prop_unregister(ds,
675 zfs_prop_to_name(ZFS_PROP_PRIMARYCACHE),
676 primary_cache_changed_cb, os));
677 VERIFY0(dsl_prop_unregister(ds,
678 zfs_prop_to_name(ZFS_PROP_SECONDARYCACHE),
679 secondary_cache_changed_cb, os));
680 }
681
682 if (os->os_sa)
683 sa_tear_down(os);
684
685 dmu_objset_evict_dbufs(os);
686
687 mutex_enter(&os->os_lock);
688 spa_evicting_os_register(os->os_spa, os);
689 if (list_is_empty(&os->os_dnodes)) {
690 mutex_exit(&os->os_lock);
691 dmu_objset_evict_done(os);
692 } else {
693 mutex_exit(&os->os_lock);
694 }
695 }
696
697 void
698 dmu_objset_evict_done(objset_t *os)
699 {
700 ASSERT3P(list_head(&os->os_dnodes), ==, NULL);
701
702 dnode_special_close(&os->os_meta_dnode);
703 if (DMU_USERUSED_DNODE(os)) {
704 dnode_special_close(&os->os_userused_dnode);
|