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 (dsl_dataset_feature_is_active(ds, f)) in dsl_destroy_snapshot_sync_impl()
289 dsl_dataset_deactivate_feature(ds, f, tx); in dsl_destroy_snapshot_sync_impl()
291 if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { in dsl_destroy_snapshot_sync_impl()
292 ASSERT3P(ds->ds_prev, ==, NULL); in dsl_destroy_snapshot_sync_impl()
294 dsl_dataset_phys(ds)->ds_prev_snap_obj, FTAG, &ds_prev)); in dsl_destroy_snapshot_sync_impl()
302 if (dsl_dataset_phys(ds)->ds_next_snap_obj != 0) { in dsl_destroy_snapshot_sync_impl()
306 dsl_dataset_phys(ds)->ds_next_snap_obj, in dsl_destroy_snapshot_sync_impl()
312 dsl_dataset_phys(ds)->ds_next_snap_obj; in dsl_destroy_snapshot_sync_impl()
321 dsl_dataset_phys(ds)->ds_next_snap_obj, FTAG, &ds_next)); in dsl_destroy_snapshot_sync_impl()
328 dsl_dataset_phys(ds)->ds_prev_snap_obj; in dsl_destroy_snapshot_sync_impl()
330 dsl_dataset_phys(ds)->ds_prev_snap_txg; in dsl_destroy_snapshot_sync_impl()
331 ASSERT3U(dsl_dataset_phys(ds)->ds_prev_snap_txg, ==, in dsl_destroy_snapshot_sync_impl()
335 process_old_deadlist(ds, ds_prev, ds_next, in dsl_destroy_snapshot_sync_impl()
342 dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_snapshot_sync_impl()
349 dsl_dataset_phys(ds)->ds_prev_snap_txg, UINT64_MAX, in dsl_destroy_snapshot_sync_impl()
351 dsl_dir_diduse_space(ds->ds_dir, DD_USED_SNAP, in dsl_destroy_snapshot_sync_impl()
356 &dp->dp_free_bpobj, dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_snapshot_sync_impl()
363 dsl_dataset_phys(ds)->ds_deadlist_obj, tx); in dsl_destroy_snapshot_sync_impl()
366 dsl_deadlist_close(&ds->ds_deadlist); in dsl_destroy_snapshot_sync_impl()
367 dsl_deadlist_free(mos, dsl_dataset_phys(ds)->ds_deadlist_obj, tx); in dsl_destroy_snapshot_sync_impl()
368 dmu_buf_will_dirty(ds->ds_dbuf, tx); in dsl_destroy_snapshot_sync_impl()
369 dsl_dataset_phys(ds)->ds_deadlist_obj = 0; in dsl_destroy_snapshot_sync_impl()
371 dsl_destroy_snapshot_handle_remaps(ds, ds_next, tx); in dsl_destroy_snapshot_sync_impl()
374 dsl_dataset_remove_clones_key(ds, in dsl_destroy_snapshot_sync_impl()
375 dsl_dataset_phys(ds)->ds_creation_txg, tx); in dsl_destroy_snapshot_sync_impl()
393 dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_snapshot_sync_impl()
394 dsl_dataset_phys(ds)->ds_creation_txg, in dsl_destroy_snapshot_sync_impl()
403 dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj, FTAG, &hds)); in dsl_destroy_snapshot_sync_impl()
405 dsl_dataset_phys(ds)->ds_creation_txg, tx); in dsl_destroy_snapshot_sync_impl()
408 dsl_dataset_phys(ds)->ds_creation_txg, tx); in dsl_destroy_snapshot_sync_impl()
413 ASSERT3P(ds_next->ds_prev, ==, ds); in dsl_destroy_snapshot_sync_impl()
418 dsl_dataset_phys(ds)->ds_prev_snap_obj, in dsl_destroy_snapshot_sync_impl()
437 dsl_dir_diduse_space(ds->ds_dir, in dsl_destroy_snapshot_sync_impl()
447 if (ds->ds_objset) { in dsl_destroy_snapshot_sync_impl()
448 dmu_objset_evict(ds->ds_objset); in dsl_destroy_snapshot_sync_impl()
449 ds->ds_objset = NULL; in dsl_destroy_snapshot_sync_impl()
454 ASSERT(dsl_dataset_phys(ds)->ds_snapnames_zapobj == 0); in dsl_destroy_snapshot_sync_impl()
456 dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj, FTAG, &ds_head)); in dsl_destroy_snapshot_sync_impl()
457 VERIFY0(dsl_dataset_get_snapname(ds)); in dsl_destroy_snapshot_sync_impl()
463 ds->ds_snapname, &val); in dsl_destroy_snapshot_sync_impl()
468 VERIFY0(dsl_dataset_snap_remove(ds_head, ds->ds_snapname, tx, B_TRUE)); in dsl_destroy_snapshot_sync_impl()
474 spa_prop_clear_bootfs(dp->dp_spa, ds->ds_object, tx); in dsl_destroy_snapshot_sync_impl()
476 if (dsl_dataset_phys(ds)->ds_next_clones_obj != 0) { in dsl_destroy_snapshot_sync_impl()
479 dsl_dataset_phys(ds)->ds_next_clones_obj, &count) && in dsl_destroy_snapshot_sync_impl()
482 dsl_dataset_phys(ds)->ds_next_clones_obj, tx)); in dsl_destroy_snapshot_sync_impl()
484 if (dsl_dataset_phys(ds)->ds_props_obj != 0) in dsl_destroy_snapshot_sync_impl()
485 VERIFY0(zap_destroy(mos, dsl_dataset_phys(ds)->ds_props_obj, in dsl_destroy_snapshot_sync_impl()
487 if (dsl_dataset_phys(ds)->ds_userrefs_obj != 0) in dsl_destroy_snapshot_sync_impl()
488 VERIFY0(zap_destroy(mos, dsl_dataset_phys(ds)->ds_userrefs_obj, in dsl_destroy_snapshot_sync_impl()
490 dsl_dir_rele(ds->ds_dir, ds); in dsl_destroy_snapshot_sync_impl()
491 ds->ds_dir = NULL; in dsl_destroy_snapshot_sync_impl()
503 dsl_dataset_t *ds; in dsl_destroy_snapshot_sync() local
505 int error = dsl_dataset_hold(dp, dsname, FTAG, &ds); in dsl_destroy_snapshot_sync()
509 dsl_destroy_snapshot_sync_impl(ds, defer, tx); in dsl_destroy_snapshot_sync()
510 dsl_dataset_rele(ds, FTAG); in dsl_destroy_snapshot_sync()
634 dsl_dataset_t *ds; member
659 dsl_dataset_phys(ka->ds)->ds_prev_snap_txg); in kill_blkptr()
660 (void) dsl_dataset_block_kill(ka->ds, bp, tx, B_FALSE); in kill_blkptr()
667 old_synchronous_dataset_destroy(dsl_dataset_t *ds, dmu_tx_t *tx) in old_synchronous_dataset_destroy() argument
678 ka.ds = ds; in old_synchronous_dataset_destroy()
680 VERIFY0(traverse_dataset(ds, in old_synchronous_dataset_destroy()
681 dsl_dataset_phys(ds)->ds_prev_snap_txg, TRAVERSE_POST | in old_synchronous_dataset_destroy()
683 ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || in old_synchronous_dataset_destroy()
684 dsl_dataset_phys(ds)->ds_unique_bytes == 0); in old_synchronous_dataset_destroy()
688 dsl_destroy_head_check_impl(dsl_dataset_t *ds, int expected_holds) in dsl_destroy_head_check_impl() argument
694 ASSERT(!ds->ds_is_snapshot); in dsl_destroy_head_check_impl()
695 if (ds->ds_is_snapshot) in dsl_destroy_head_check_impl()
698 if (zfs_refcount_count(&ds->ds_longholds) != expected_holds) in dsl_destroy_head_check_impl()
701 mos = ds->ds_dir->dd_pool->dp_meta_objset; in dsl_destroy_head_check_impl()
708 if (ds->ds_prev != NULL && in dsl_destroy_head_check_impl()
709 dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj == ds->ds_object) in dsl_destroy_head_check_impl()
716 dsl_dir_phys(ds->ds_dir)->dd_child_dir_zapobj, &count); in dsl_destroy_head_check_impl()
722 if (dsl_dir_is_clone(ds->ds_dir) && DS_IS_DEFER_DESTROY(ds->ds_prev) && in dsl_destroy_head_check_impl()
723 dsl_dataset_phys(ds->ds_prev)->ds_num_children == 2 && in dsl_destroy_head_check_impl()
724 ds->ds_prev->ds_userrefs == 0) { in dsl_destroy_head_check_impl()
726 if (!zfs_refcount_is_zero(&ds->ds_prev->ds_longholds)) in dsl_destroy_head_check_impl()
737 dsl_dataset_t *ds; in dsl_destroy_head_check() local
740 error = dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds); in dsl_destroy_head_check()
744 error = dsl_destroy_head_check_impl(ds, 0); in dsl_destroy_head_check()
745 dsl_dataset_rele(ds, FTAG); in dsl_destroy_head_check()
804 dsl_destroy_head_sync_impl(dsl_dataset_t *ds, dmu_tx_t *tx) in dsl_destroy_head_sync_impl() argument
811 ASSERT3U(dsl_dataset_phys(ds)->ds_num_children, <=, 1); in dsl_destroy_head_sync_impl()
812 ASSERT(ds->ds_prev == NULL || in dsl_destroy_head_sync_impl()
813 dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj != ds->ds_object); in dsl_destroy_head_sync_impl()
814 rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); in dsl_destroy_head_sync_impl()
815 ASSERT3U(dsl_dataset_phys(ds)->ds_bp.blk_birth, <=, tx->tx_txg); in dsl_destroy_head_sync_impl()
816 rrw_exit(&ds->ds_bp_rwlock, FTAG); in dsl_destroy_head_sync_impl()
820 spa_history_log_internal_ds(ds, "destroy", tx, ""); in dsl_destroy_head_sync_impl()
822 rmorigin = (dsl_dir_is_clone(ds->ds_dir) && in dsl_destroy_head_sync_impl()
823 DS_IS_DEFER_DESTROY(ds->ds_prev) && in dsl_destroy_head_sync_impl()
824 dsl_dataset_phys(ds->ds_prev)->ds_num_children == 2 && in dsl_destroy_head_sync_impl()
825 ds->ds_prev->ds_userrefs == 0); in dsl_destroy_head_sync_impl()
828 if (ds->ds_reserved != 0) { in dsl_destroy_head_sync_impl()
829 dsl_dataset_set_refreservation_sync_impl(ds, in dsl_destroy_head_sync_impl()
832 ASSERT0(ds->ds_reserved); in dsl_destroy_head_sync_impl()
835 obj = ds->ds_object; in dsl_destroy_head_sync_impl()
838 if (dsl_dataset_feature_is_active(ds, f)) in dsl_destroy_head_sync_impl()
839 dsl_dataset_deactivate_feature(ds, f, tx); in dsl_destroy_head_sync_impl()
842 dsl_scan_ds_destroyed(ds, tx); in dsl_destroy_head_sync_impl()
844 if (dsl_dataset_phys(ds)->ds_prev_snap_obj != 0) { in dsl_destroy_head_sync_impl()
846 ASSERT(ds->ds_prev != NULL); in dsl_destroy_head_sync_impl()
847 ASSERT3U(dsl_dataset_phys(ds->ds_prev)->ds_next_snap_obj, !=, in dsl_destroy_head_sync_impl()
849 ASSERT0(dsl_dataset_phys(ds)->ds_next_snap_obj); in dsl_destroy_head_sync_impl()
851 dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx); in dsl_destroy_head_sync_impl()
852 if (dsl_dataset_phys(ds->ds_prev)->ds_next_clones_obj != 0) { in dsl_destroy_head_sync_impl()
853 dsl_dataset_remove_from_next_clones(ds->ds_prev, in dsl_destroy_head_sync_impl()
857 ASSERT3U(dsl_dataset_phys(ds->ds_prev)->ds_num_children, >, 1); in dsl_destroy_head_sync_impl()
858 dsl_dataset_phys(ds->ds_prev)->ds_num_children--; in dsl_destroy_head_sync_impl()
867 dsl_deadlist_close(&ds->ds_deadlist); in dsl_destroy_head_sync_impl()
868 dsl_deadlist_free(mos, dsl_dataset_phys(ds)->ds_deadlist_obj, tx); in dsl_destroy_head_sync_impl()
869 dmu_buf_will_dirty(ds->ds_dbuf, tx); in dsl_destroy_head_sync_impl()
870 dsl_dataset_phys(ds)->ds_deadlist_obj = 0; in dsl_destroy_head_sync_impl()
872 if (dsl_dataset_remap_deadlist_exists(ds)) in dsl_destroy_head_sync_impl()
873 dsl_dataset_destroy_remap_deadlist(ds, tx); in dsl_destroy_head_sync_impl()
876 VERIFY0(dmu_objset_from_ds(ds, &os)); in dsl_destroy_head_sync_impl()
879 old_synchronous_dataset_destroy(ds, tx); in dsl_destroy_head_sync_impl()
903 used = dsl_dir_phys(ds->ds_dir)->dd_used_bytes; in dsl_destroy_head_sync_impl()
904 comp = dsl_dir_phys(ds->ds_dir)->dd_compressed_bytes; in dsl_destroy_head_sync_impl()
905 uncomp = dsl_dir_phys(ds->ds_dir)->dd_uncompressed_bytes; in dsl_destroy_head_sync_impl()
907 ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || in dsl_destroy_head_sync_impl()
908 dsl_dataset_phys(ds)->ds_unique_bytes == used); in dsl_destroy_head_sync_impl()
910 rrw_enter(&ds->ds_bp_rwlock, RW_READER, FTAG); in dsl_destroy_head_sync_impl()
912 &dsl_dataset_phys(ds)->ds_bp, in dsl_destroy_head_sync_impl()
913 dsl_dataset_phys(ds)->ds_prev_snap_txg, in dsl_destroy_head_sync_impl()
915 rrw_exit(&ds->ds_bp_rwlock, FTAG); in dsl_destroy_head_sync_impl()
916 dsl_dir_diduse_space(ds->ds_dir, DD_USED_HEAD, in dsl_destroy_head_sync_impl()
922 if (ds->ds_prev != NULL) { in dsl_destroy_head_sync_impl()
925 dsl_dir_phys(ds->ds_prev->ds_dir)->dd_clones, in dsl_destroy_head_sync_impl()
926 ds->ds_object, tx)); in dsl_destroy_head_sync_impl()
928 prevobj = ds->ds_prev->ds_object; in dsl_destroy_head_sync_impl()
929 dsl_dataset_rele(ds->ds_prev, ds); in dsl_destroy_head_sync_impl()
930 ds->ds_prev = NULL; in dsl_destroy_head_sync_impl()
937 if (ds->ds_objset) { in dsl_destroy_head_sync_impl()
938 dmu_objset_evict(ds->ds_objset); in dsl_destroy_head_sync_impl()
939 ds->ds_objset = NULL; in dsl_destroy_head_sync_impl()
943 dmu_buf_will_dirty(ds->ds_dir->dd_dbuf, tx); in dsl_destroy_head_sync_impl()
944 dsl_dir_phys(ds->ds_dir)->dd_head_dataset_obj = 0; in dsl_destroy_head_sync_impl()
945 ddobj = ds->ds_dir->dd_object; in dsl_destroy_head_sync_impl()
946 ASSERT(dsl_dataset_phys(ds)->ds_snapnames_zapobj != 0); in dsl_destroy_head_sync_impl()
948 dsl_dataset_phys(ds)->ds_snapnames_zapobj, tx)); in dsl_destroy_head_sync_impl()
950 if (ds->ds_bookmarks != 0) { in dsl_destroy_head_sync_impl()
951 VERIFY0(zap_destroy(mos, ds->ds_bookmarks, tx)); in dsl_destroy_head_sync_impl()
955 spa_prop_clear_bootfs(dp->dp_spa, ds->ds_object, tx); in dsl_destroy_head_sync_impl()
957 ASSERT0(dsl_dataset_phys(ds)->ds_next_clones_obj); in dsl_destroy_head_sync_impl()
958 ASSERT0(dsl_dataset_phys(ds)->ds_props_obj); in dsl_destroy_head_sync_impl()
959 ASSERT0(dsl_dataset_phys(ds)->ds_userrefs_obj); in dsl_destroy_head_sync_impl()
960 dsl_dir_rele(ds->ds_dir, ds); in dsl_destroy_head_sync_impl()
961 ds->ds_dir = NULL; in dsl_destroy_head_sync_impl()
979 dsl_dataset_t *ds; in dsl_destroy_head_sync() local
981 VERIFY0(dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds)); in dsl_destroy_head_sync()
982 dsl_destroy_head_sync_impl(ds, tx); in dsl_destroy_head_sync()
983 dsl_dataset_rele(ds, FTAG); in dsl_destroy_head_sync()
991 dsl_dataset_t *ds; in dsl_destroy_head_begin_sync() local
993 VERIFY0(dsl_dataset_hold(dp, ddha->ddha_name, FTAG, &ds)); in dsl_destroy_head_begin_sync()
996 dmu_buf_will_dirty(ds->ds_dbuf, tx); in dsl_destroy_head_begin_sync()
997 dsl_dataset_phys(ds)->ds_flags |= DS_FLAG_INCONSISTENT; in dsl_destroy_head_begin_sync()
999 spa_history_log_internal_ds(ds, "destroy begin", tx, ""); in dsl_destroy_head_begin_sync()
1000 dsl_dataset_rele(ds, FTAG); in dsl_destroy_head_begin_sync()