Lines Matching refs:ds

48 dsl_destroy_snapshot_check_impl(dsl_dataset_t *ds, boolean_t defer)  in dsl_destroy_snapshot_check_impl()  argument
50 if (!ds->ds_is_snapshot) in dsl_destroy_snapshot_check_impl()
53 if (dsl_dataset_long_held(ds)) in dsl_destroy_snapshot_check_impl()
61 if (spa_version(ds->ds_dir->dd_pool->dp_spa) < in dsl_destroy_snapshot_check_impl()
71 if (ds->ds_userrefs > 0) in dsl_destroy_snapshot_check_impl()
77 if (dsl_dataset_phys(ds)->ds_num_children > 1) in dsl_destroy_snapshot_check_impl()
92 dsl_dataset_t *ds; in dsl_destroy_snapshot_check() local
94 error = dsl_dataset_hold(dp, dsname, FTAG, &ds); in dsl_destroy_snapshot_check()
105 error = dsl_destroy_snapshot_check_impl(ds, defer); in dsl_destroy_snapshot_check()
106 dsl_dataset_rele(ds, FTAG); in dsl_destroy_snapshot_check()
113 dsl_dataset_t *ds; member
124 dsl_pool_t *dp = poa->ds->ds_dir->dd_pool; in process_old_cb()
128 if (bp->blk_birth <= dsl_dataset_phys(poa->ds)->ds_prev_snap_txg) { in process_old_cb()
129 dsl_deadlist_insert(&poa->ds->ds_deadlist, bp, tx); in process_old_cb()
146 process_old_deadlist(dsl_dataset_t *ds, dsl_dataset_t *ds_prev, in process_old_deadlist() argument
150 dsl_pool_t *dp = ds->ds_dir->dd_pool; in process_old_deadlist()
154 ASSERT(ds->ds_deadlist.dl_oldfmt); in process_old_deadlist()
157 poa.ds = ds; in process_old_deadlist()
164 ASSERT3U(poa.used, ==, dsl_dataset_phys(ds)->ds_unique_bytes); in process_old_deadlist()
167 dsl_dir_diduse_space(ds->ds_dir, DD_USED_SNAP, in process_old_deadlist()
171 dsl_deadlist_close(&ds->ds_deadlist); in process_old_deadlist()
173 deadlist_obj = dsl_dataset_phys(ds)->ds_deadlist_obj; in process_old_deadlist()
174 dsl_dataset_phys(ds)->ds_deadlist_obj = in process_old_deadlist()
177 dsl_deadlist_open(&ds->ds_deadlist, mos, in process_old_deadlist()
178 dsl_dataset_phys(ds)->ds_deadlist_obj); in process_old_deadlist()
184 dsl_dataset_remove_clones_key(dsl_dataset_t *ds, uint64_t mintxg, dmu_tx_t *tx) in dsl_dataset_remove_clones_key() argument
186 objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset; in dsl_dataset_remove_clones_key()
195 if (dsl_dir_phys(ds->ds_dir)->dd_clones == 0) in dsl_dataset_remove_clones_key()
198 for (zap_cursor_init(&zc, mos, dsl_dir_phys(ds->ds_dir)->dd_clones); in dsl_dataset_remove_clones_key()
203 VERIFY0(dsl_dataset_hold_obj(ds->ds_dir->dd_pool, in dsl_dataset_remove_clones_key()
220 dsl_destroy_snapshot_handle_remaps(dsl_dataset_t *ds, dsl_dataset_t *ds_next, in dsl_destroy_snapshot_handle_remaps() argument
223 dsl_pool_t *dp = ds->ds_dir->dd_pool; in dsl_destroy_snapshot_handle_remaps()
232 dsl_dataset_phys(ds)->ds_prev_snap_txg, tx); in dsl_destroy_snapshot_handle_remaps()
236 if (dsl_dataset_remap_deadlist_exists(ds)) { in dsl_destroy_snapshot_handle_remaps()
238 dsl_dataset_get_remap_deadlist_object(ds); in dsl_destroy_snapshot_handle_remaps()
248 dsl_dataset_destroy_remap_deadlist(ds, tx); in dsl_destroy_snapshot_handle_remaps()
253 dsl_destroy_snapshot_sync_impl(dsl_dataset_t *ds, boolean_t defer, dmu_tx_t *tx) in dsl_destroy_snapshot_sync_impl() argument
257 dsl_pool_t *dp = ds->ds_dir->dd_pool; in dsl_destroy_snapshot_sync_impl()
263 rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); in dsl_destroy_snapshot_sync_impl()
264 ASSERT3U(dsl_dataset_phys(ds)->ds_bp.blk_birth, <=, tx->tx_txg); in dsl_destroy_snapshot_sync_impl()
265 rrw_exit(&ds->ds_bp_rwlock, FTAG); in dsl_destroy_snapshot_sync_impl()
266 ASSERT(zfs_refcount_is_zero(&ds->ds_longholds)); in dsl_destroy_snapshot_sync_impl()
269 (ds->ds_userrefs > 0 || in dsl_destroy_snapshot_sync_impl()
270 dsl_dataset_phys(ds)->ds_num_children > 1)) { in dsl_destroy_snapshot_sync_impl()
272 dmu_buf_will_dirty(ds->ds_dbuf, tx); in dsl_destroy_snapshot_sync_impl()
273 dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_DEFER_DESTROY; in dsl_destroy_snapshot_sync_impl()
274 spa_history_log_internal_ds(ds, "defer_destroy", tx, ""); in dsl_destroy_snapshot_sync_impl()
278 ASSERT3U(dsl_dataset_phys(ds)->ds_num_children, <=, 1); in dsl_destroy_snapshot_sync_impl()
281 spa_history_log_internal_ds(ds, "destroy", tx, ""); in dsl_destroy_snapshot_sync_impl()
283 dsl_scan_ds_destroyed(ds, tx); in dsl_destroy_snapshot_sync_impl()
285 obj = ds->ds_object; in dsl_destroy_snapshot_sync_impl()
288 if (ds->ds_feature_inuse[f]) { in dsl_destroy_snapshot_sync_impl()
290 ds->ds_feature_inuse[f] = B_FALSE; in dsl_destroy_snapshot_sync_impl()
293 if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { in dsl_destroy_snapshot_sync_impl()
294 ASSERT3P(ds->ds_prev, ==, NULL); in dsl_destroy_snapshot_sync_impl()
296 dsl_dataset_phys(ds)->ds_prev_snap_obj, FTAG, &ds_prev)); in dsl_destroy_snapshot_sync_impl()
304 if (dsl_dataset_phys(ds)->ds_next_snap_obj != 0) { in dsl_destroy_snapshot_sync_impl()
308 dsl_dataset_phys(ds)->ds_next_snap_obj, in dsl_destroy_snapshot_sync_impl()
314 dsl_dataset_phys(ds)->ds_next_snap_obj; in dsl_destroy_snapshot_sync_impl()
323 dsl_dataset_phys(ds)->ds_next_snap_obj, FTAG, &ds_next)); in dsl_destroy_snapshot_sync_impl()
330 dsl_dataset_phys(ds)->ds_prev_snap_obj; in dsl_destroy_snapshot_sync_impl()
332 dsl_dataset_phys(ds)->ds_prev_snap_txg; in dsl_destroy_snapshot_sync_impl()
333 ASSERT3U(dsl_dataset_phys(ds)->ds_prev_snap_txg, ==, in dsl_destroy_snapshot_sync_impl()
337 process_old_deadlist(ds, ds_prev, ds_next, in dsl_destroy_snapshot_sync_impl()
344 dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_snapshot_sync_impl()
351 dsl_dataset_phys(ds)->ds_prev_snap_txg, UINT64_MAX, in dsl_destroy_snapshot_sync_impl()
353 dsl_dir_diduse_space(ds->ds_dir, DD_USED_SNAP, in dsl_destroy_snapshot_sync_impl()
358 &dp->dp_free_bpobj, dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_snapshot_sync_impl()
365 dsl_dataset_phys(ds)->ds_deadlist_obj, tx); in dsl_destroy_snapshot_sync_impl()
368 dsl_deadlist_close(&ds->ds_deadlist); in dsl_destroy_snapshot_sync_impl()
369 dsl_deadlist_free(mos, dsl_dataset_phys(ds)->ds_deadlist_obj, tx); in dsl_destroy_snapshot_sync_impl()
370 dmu_buf_will_dirty(ds->ds_dbuf, tx); in dsl_destroy_snapshot_sync_impl()
371 dsl_dataset_phys(ds)->ds_deadlist_obj = 0; in dsl_destroy_snapshot_sync_impl()
373 dsl_destroy_snapshot_handle_remaps(ds, ds_next, tx); in dsl_destroy_snapshot_sync_impl()
376 dsl_dataset_remove_clones_key(ds, in dsl_destroy_snapshot_sync_impl()
377 dsl_dataset_phys(ds)->ds_creation_txg, tx); in dsl_destroy_snapshot_sync_impl()
395 dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_snapshot_sync_impl()
396 dsl_dataset_phys(ds)->ds_creation_txg, in dsl_destroy_snapshot_sync_impl()
405 dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj, FTAG, &hds)); in dsl_destroy_snapshot_sync_impl()
407 dsl_dataset_phys(ds)->ds_creation_txg, tx); in dsl_destroy_snapshot_sync_impl()
410 dsl_dataset_phys(ds)->ds_creation_txg, tx); in dsl_destroy_snapshot_sync_impl()
415 ASSERT3P(ds_next->ds_prev, ==, ds); in dsl_destroy_snapshot_sync_impl()
420 dsl_dataset_phys(ds)->ds_prev_snap_obj, in dsl_destroy_snapshot_sync_impl()
439 dsl_dir_diduse_space(ds->ds_dir, in dsl_destroy_snapshot_sync_impl()
449 if (ds->ds_objset) { in dsl_destroy_snapshot_sync_impl()
450 dmu_objset_evict(ds->ds_objset); in dsl_destroy_snapshot_sync_impl()
451 ds->ds_objset = NULL; in dsl_destroy_snapshot_sync_impl()
456 ASSERT(dsl_dataset_phys(ds)->ds_snapnames_zapobj == 0); in dsl_destroy_snapshot_sync_impl()
458 dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj, FTAG, &ds_head)); in dsl_destroy_snapshot_sync_impl()
459 VERIFY0(dsl_dataset_get_snapname(ds)); in dsl_destroy_snapshot_sync_impl()
465 ds->ds_snapname, &val); in dsl_destroy_snapshot_sync_impl()
470 VERIFY0(dsl_dataset_snap_remove(ds_head, ds->ds_snapname, tx, B_TRUE)); in dsl_destroy_snapshot_sync_impl()
476 spa_prop_clear_bootfs(dp->dp_spa, ds->ds_object, tx); in dsl_destroy_snapshot_sync_impl()
478 if (dsl_dataset_phys(ds)->ds_next_clones_obj != 0) { in dsl_destroy_snapshot_sync_impl()
481 dsl_dataset_phys(ds)->ds_next_clones_obj, &count) && in dsl_destroy_snapshot_sync_impl()
484 dsl_dataset_phys(ds)->ds_next_clones_obj, tx)); in dsl_destroy_snapshot_sync_impl()
486 if (dsl_dataset_phys(ds)->ds_props_obj != 0) in dsl_destroy_snapshot_sync_impl()
487 VERIFY0(zap_destroy(mos, dsl_dataset_phys(ds)->ds_props_obj, in dsl_destroy_snapshot_sync_impl()
489 if (dsl_dataset_phys(ds)->ds_userrefs_obj != 0) in dsl_destroy_snapshot_sync_impl()
490 VERIFY0(zap_destroy(mos, dsl_dataset_phys(ds)->ds_userrefs_obj, in dsl_destroy_snapshot_sync_impl()
492 dsl_dir_rele(ds->ds_dir, ds); in dsl_destroy_snapshot_sync_impl()
493 ds->ds_dir = NULL; in dsl_destroy_snapshot_sync_impl()
505 dsl_dataset_t *ds; in dsl_destroy_snapshot_sync() local
507 int error = dsl_dataset_hold(dp, dsname, FTAG, &ds); in dsl_destroy_snapshot_sync()
511 dsl_destroy_snapshot_sync_impl(ds, defer, tx); in dsl_destroy_snapshot_sync()
512 dsl_dataset_rele(ds, FTAG); in dsl_destroy_snapshot_sync()
636 dsl_dataset_t *ds; member
661 dsl_dataset_phys(ka->ds)->ds_prev_snap_txg); in kill_blkptr()
662 (void) dsl_dataset_block_kill(ka->ds, bp, tx, B_FALSE); in kill_blkptr()
669 old_synchronous_dataset_destroy(dsl_dataset_t *ds, dmu_tx_t *tx) in old_synchronous_dataset_destroy() argument
680 ka.ds = ds; in old_synchronous_dataset_destroy()
682 VERIFY0(traverse_dataset(ds, in old_synchronous_dataset_destroy()
683 dsl_dataset_phys(ds)->ds_prev_snap_txg, TRAVERSE_POST | in old_synchronous_dataset_destroy()
685 ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || in old_synchronous_dataset_destroy()
686 dsl_dataset_phys(ds)->ds_unique_bytes == 0); in old_synchronous_dataset_destroy()
690 dsl_destroy_head_check_impl(dsl_dataset_t *ds, int expected_holds) in dsl_destroy_head_check_impl() argument
696 ASSERT(!ds->ds_is_snapshot); in dsl_destroy_head_check_impl()
697 if (ds->ds_is_snapshot) in dsl_destroy_head_check_impl()
700 if (zfs_refcount_count(&ds->ds_longholds) != expected_holds) in dsl_destroy_head_check_impl()
703 mos = ds->ds_dir->dd_pool->dp_meta_objset; in dsl_destroy_head_check_impl()
710 if (ds->ds_prev != NULL && in dsl_destroy_head_check_impl()
711 dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj == ds->ds_object) in dsl_destroy_head_check_impl()
718 dsl_dir_phys(ds->ds_dir)->dd_child_dir_zapobj, &count); in dsl_destroy_head_check_impl()
724 if (dsl_dir_is_clone(ds->ds_dir) && DS_IS_DEFER_DESTROY(ds->ds_prev) && in dsl_destroy_head_check_impl()
725 dsl_dataset_phys(ds->ds_prev)->ds_num_children == 2 && in dsl_destroy_head_check_impl()
726 ds->ds_prev->ds_userrefs == 0) { in dsl_destroy_head_check_impl()
728 if (!zfs_refcount_is_zero(&ds->ds_prev->ds_longholds)) in dsl_destroy_head_check_impl()
739 dsl_dataset_t *ds; in dsl_destroy_head_check() local
742 error = dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds); in dsl_destroy_head_check()
746 error = dsl_destroy_head_check_impl(ds, 0); in dsl_destroy_head_check()
747 dsl_dataset_rele(ds, FTAG); in dsl_destroy_head_check()
806 dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx) in dsl_destroy_head_sync_impl() argument
813 ASSERT3U(dsl_dataset_phys(ds)->ds_num_children, <=, 1); in dsl_destroy_head_sync_impl()
814 ASSERT(ds->ds_prev == NULL || in dsl_destroy_head_sync_impl()
815 dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj != ds->ds_object); in dsl_destroy_head_sync_impl()
816 rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); in dsl_destroy_head_sync_impl()
817 ASSERT3U(dsl_dataset_phys(ds)->ds_bp.blk_birth, <=, tx->tx_txg); in dsl_destroy_head_sync_impl()
818 rrw_exit(&ds->ds_bp_rwlock, FTAG); in dsl_destroy_head_sync_impl()
822 spa_history_log_internal_ds(ds, "destroy", tx, ""); in dsl_destroy_head_sync_impl()
824 rmorigin = (dsl_dir_is_clone(ds->ds_dir) && in dsl_destroy_head_sync_impl()
825 DS_IS_DEFER_DESTROY(ds->ds_prev) && in dsl_destroy_head_sync_impl()
826 dsl_dataset_phys(ds->ds_prev)->ds_num_children == 2 && in dsl_destroy_head_sync_impl()
827 ds->ds_prev->ds_userrefs == 0); in dsl_destroy_head_sync_impl()
830 if (ds->ds_reserved != 0) { in dsl_destroy_head_sync_impl()
831 dsl_dataset_set_refreservation_sync_impl(ds, in dsl_destroy_head_sync_impl()
834 ASSERT0(ds->ds_reserved); in dsl_destroy_head_sync_impl()
837 obj = ds->ds_object; in dsl_destroy_head_sync_impl()
840 if (ds->ds_feature_inuse[f]) { in dsl_destroy_head_sync_impl()
842 ds->ds_feature_inuse[f] = B_FALSE; in dsl_destroy_head_sync_impl()
846 dsl_scan_ds_destroyed(ds, tx); in dsl_destroy_head_sync_impl()
848 if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { in dsl_destroy_head_sync_impl()
850 ASSERT(ds->ds_prev != NULL); in dsl_destroy_head_sync_impl()
851 ASSERT3U(dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj, !=, in dsl_destroy_head_sync_impl()
853 ASSERT0(dsl_dataset_phys(ds)->ds_next_snap_obj); in dsl_destroy_head_sync_impl()
855 dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx); in dsl_destroy_head_sync_impl()
856 if (dsl_dataset_phys(ds->ds_prev)->ds_next_clones_obj != 0) { in dsl_destroy_head_sync_impl()
857 dsl_dataset_remove_from_next_clones(ds->ds_prev, in dsl_destroy_head_sync_impl()
861 ASSERT3U(dsl_dataset_phys(ds->ds_prev)->ds_num_children, >, 1); in dsl_destroy_head_sync_impl()
862 dsl_dataset_phys(ds->ds_prev)->ds_num_children--; in dsl_destroy_head_sync_impl()
871 dsl_deadlist_close(&ds->ds_deadlist); in dsl_destroy_head_sync_impl()
872 dsl_deadlist_free(mos, dsl_dataset_phys(ds)->ds_deadlist_obj, tx); in dsl_destroy_head_sync_impl()
873 dmu_buf_will_dirty(ds->ds_dbuf, tx); in dsl_destroy_head_sync_impl()
874 dsl_dataset_phys(ds)->ds_deadlist_obj = 0; in dsl_destroy_head_sync_impl()
876 if (dsl_dataset_remap_deadlist_exists(ds)) in dsl_destroy_head_sync_impl()
877 dsl_dataset_destroy_remap_deadlist(ds, tx); in dsl_destroy_head_sync_impl()
880 VERIFY0(dmu_objset_from_ds(ds, &os)); in dsl_destroy_head_sync_impl()
883 old_synchronous_dataset_destroy(ds, tx); in dsl_destroy_head_sync_impl()
907 used = dsl_dir_phys(ds->ds_dir)->dd_used_bytes; in dsl_destroy_head_sync_impl()
908 comp = dsl_dir_phys(ds->ds_dir)->dd_compressed_bytes; in dsl_destroy_head_sync_impl()
909 uncomp = dsl_dir_phys(ds->ds_dir)->dd_uncompressed_bytes; in dsl_destroy_head_sync_impl()
911 ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || in dsl_destroy_head_sync_impl()
912 dsl_dataset_phys(ds)->ds_unique_bytes == used); in dsl_destroy_head_sync_impl()
914 rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); in dsl_destroy_head_sync_impl()
916 &dsl_dataset_phys(ds)->ds_bp, in dsl_destroy_head_sync_impl()
917 dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_head_sync_impl()
919 rrw_exit(&ds->ds_bp_rwlock, FTAG); in dsl_destroy_head_sync_impl()
920 dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, in dsl_destroy_head_sync_impl()
926 if (ds->ds_prev != NULL) { in dsl_destroy_head_sync_impl()
929 dsl_dir_phys(ds->ds_prev->ds_dir)->dd_clones, in dsl_destroy_head_sync_impl()
930 ds->ds_object, tx)); in dsl_destroy_head_sync_impl()
932 prevobj = ds->ds_prev->ds_object; in dsl_destroy_head_sync_impl()
933 dsl_dataset_rele(ds->ds_prev, ds); in dsl_destroy_head_sync_impl()
934 ds->ds_prev = NULL; in dsl_destroy_head_sync_impl()
941 if (ds->ds_objset) { in dsl_destroy_head_sync_impl()
942 dmu_objset_evict(ds->ds_objset); in dsl_destroy_head_sync_impl()
943 ds->ds_objset = NULL; in dsl_destroy_head_sync_impl()
947 dmu_buf_will_dirty(ds->ds_dir->dd_dbuf, tx); in dsl_destroy_head_sync_impl()
948 dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj = 0; in dsl_destroy_head_sync_impl()
949 ddobj = ds->ds_dir->dd_object; in dsl_destroy_head_sync_impl()
950 ASSERT(dsl_dataset_phys(ds)->ds_snapnames_zapobj != 0); in dsl_destroy_head_sync_impl()
952 dsl_dataset_phys(ds)->ds_snapnames_zapobj, tx)); in dsl_destroy_head_sync_impl()
954 if (ds->ds_bookmarks != 0) { in dsl_destroy_head_sync_impl()
955 VERIFY0(zap_destroy(mos, ds->ds_bookmarks, tx)); in dsl_destroy_head_sync_impl()
959 spa_prop_clear_bootfs(dp->dp_spa, ds->ds_object, tx); in dsl_destroy_head_sync_impl()
961 ASSERT0(dsl_dataset_phys(ds)->ds_next_clones_obj); in dsl_destroy_head_sync_impl()
962 ASSERT0(dsl_dataset_phys(ds)->ds_props_obj); in dsl_destroy_head_sync_impl()
963 ASSERT0(dsl_dataset_phys(ds)->ds_userrefs_obj); in dsl_destroy_head_sync_impl()
964 dsl_dir_rele(ds->ds_dir, ds); in dsl_destroy_head_sync_impl()
965 ds->ds_dir = NULL; in dsl_destroy_head_sync_impl()
983 dsl_dataset_t *ds; in dsl_destroy_head_sync() local
985 VERIFY0(dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds)); in dsl_destroy_head_sync()
986 dsl_destroy_head_sync_impl(ds, tx); in dsl_destroy_head_sync()
987 dsl_dataset_rele(ds, FTAG); in dsl_destroy_head_sync()
995 dsl_dataset_t *ds; in dsl_destroy_head_begin_sync() local
997 VERIFY0(dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds)); in dsl_destroy_head_begin_sync()
1000 dmu_buf_will_dirty(ds->ds_dbuf, tx); in dsl_destroy_head_begin_sync()
1001 dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_INCONSISTENT; in dsl_destroy_head_begin_sync()
1003 spa_history_log_internal_ds(ds, "destroy begin", tx, ""); in dsl_destroy_head_begin_sync()
1004 dsl_dataset_rele(ds, FTAG); in dsl_destroy_head_begin_sync()