Lines Matching refs:dp

171 dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **ddp)  in dsl_pool_open_special_dir()  argument
176 err = zap_lookup(dp->dp_meta_objset, in dsl_pool_open_special_dir()
177 dsl_dir_phys(dp->dp_root_dir)->dd_child_dir_zapobj, in dsl_pool_open_special_dir()
182 return (dsl_dir_hold_obj(dp, obj, name, dp, ddp)); in dsl_pool_open_special_dir()
188 dsl_pool_t *dp; in dsl_pool_open_impl() local
191 dp = kmem_zalloc(sizeof (dsl_pool_t), KM_SLEEP); in dsl_pool_open_impl()
192 dp->dp_spa = spa; in dsl_pool_open_impl()
193 dp->dp_meta_rootbp = *bp; in dsl_pool_open_impl()
194 rrw_init(&dp->dp_config_rwlock, B_TRUE); in dsl_pool_open_impl()
195 txg_init(dp, txg); in dsl_pool_open_impl()
198 txg_list_create(&dp->dp_dirty_datasets, spa, in dsl_pool_open_impl()
200 txg_list_create(&dp->dp_dirty_zilogs, spa, in dsl_pool_open_impl()
202 txg_list_create(&dp->dp_dirty_dirs, spa, in dsl_pool_open_impl()
204 txg_list_create(&dp->dp_sync_tasks, spa, in dsl_pool_open_impl()
206 txg_list_create(&dp->dp_early_sync_tasks, spa, in dsl_pool_open_impl()
209 dp->dp_sync_taskq = taskq_create("dp_sync_taskq", in dsl_pool_open_impl()
213 dp->dp_zil_clean_taskq = taskq_create("dp_zil_clean_taskq", in dsl_pool_open_impl()
219 mutex_init(&dp->dp_lock, NULL, MUTEX_DEFAULT, NULL); in dsl_pool_open_impl()
220 cv_init(&dp->dp_spaceavail_cv, NULL, CV_DEFAULT, NULL); in dsl_pool_open_impl()
222 dp->dp_vnrele_taskq = taskq_create("zfs_vn_rele_taskq", 1, minclsyspri, in dsl_pool_open_impl()
224 dp->dp_unlinked_drain_taskq = taskq_create("z_unlinked_drain", in dsl_pool_open_impl()
228 return (dp); in dsl_pool_open_impl()
235 dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); in dsl_pool_init() local
237 err = dmu_objset_open_impl(spa, NULL, &dp->dp_meta_rootbp, in dsl_pool_init()
238 &dp->dp_meta_objset); in dsl_pool_init()
240 dsl_pool_close(dp); in dsl_pool_init()
242 *dpp = dp; in dsl_pool_init()
248 dsl_pool_open(dsl_pool_t *dp) in dsl_pool_open() argument
255 rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); in dsl_pool_open()
256 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
258 &dp->dp_root_dir_obj); in dsl_pool_open()
262 err = dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, in dsl_pool_open()
263 NULL, dp, &dp->dp_root_dir); in dsl_pool_open()
267 err = dsl_pool_open_special_dir(dp, MOS_DIR_NAME, &dp->dp_mos_dir); in dsl_pool_open()
271 if (spa_version(dp->dp_spa) >= SPA_VERSION_ORIGIN) { in dsl_pool_open()
272 err = dsl_pool_open_special_dir(dp, ORIGIN_DIR_NAME, &dd); in dsl_pool_open()
275 err = dsl_dataset_hold_obj(dp, in dsl_pool_open()
278 err = dsl_dataset_hold_obj(dp, in dsl_pool_open()
279 dsl_dataset_phys(ds)->ds_prev_snap_obj, dp, in dsl_pool_open()
280 &dp->dp_origin_snap); in dsl_pool_open()
283 dsl_dir_rele(dd, dp); in dsl_pool_open()
288 if (spa_version(dp->dp_spa) >= SPA_VERSION_DEADLISTS) { in dsl_pool_open()
289 err = dsl_pool_open_special_dir(dp, FREE_DIR_NAME, in dsl_pool_open()
290 &dp->dp_free_dir); in dsl_pool_open()
294 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
298 VERIFY0(bpobj_open(&dp->dp_free_bpobj, in dsl_pool_open()
299 dp->dp_meta_objset, obj)); in dsl_pool_open()
302 if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_OBSOLETE_COUNTS)) { in dsl_pool_open()
303 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
306 VERIFY0(bpobj_open(&dp->dp_obsolete_bpobj, in dsl_pool_open()
307 dp->dp_meta_objset, obj)); in dsl_pool_open()
322 (void) dsl_pool_open_special_dir(dp, LEAK_DIR_NAME, in dsl_pool_open()
323 &dp->dp_leak_dir); in dsl_pool_open()
325 if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_ASYNC_DESTROY)) { in dsl_pool_open()
326 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
328 &dp->dp_bptree_obj); in dsl_pool_open()
333 if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_EMPTY_BPOBJ)) { in dsl_pool_open()
334 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
336 &dp->dp_empty_bpobj); in dsl_pool_open()
341 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
343 &dp->dp_tmp_userrefs_obj); in dsl_pool_open()
349 err = dsl_scan_init(dp, dp->dp_tx.tx_open_txg); in dsl_pool_open()
352 rrw_exit(&dp->dp_config_rwlock, FTAG); in dsl_pool_open()
357 dsl_pool_close(dsl_pool_t *dp) in dsl_pool_close() argument
366 if (dp->dp_origin_snap != NULL) in dsl_pool_close()
367 dsl_dataset_rele(dp->dp_origin_snap, dp); in dsl_pool_close()
368 if (dp->dp_mos_dir != NULL) in dsl_pool_close()
369 dsl_dir_rele(dp->dp_mos_dir, dp); in dsl_pool_close()
370 if (dp->dp_free_dir != NULL) in dsl_pool_close()
371 dsl_dir_rele(dp->dp_free_dir, dp); in dsl_pool_close()
372 if (dp->dp_leak_dir != NULL) in dsl_pool_close()
373 dsl_dir_rele(dp->dp_leak_dir, dp); in dsl_pool_close()
374 if (dp->dp_root_dir != NULL) in dsl_pool_close()
375 dsl_dir_rele(dp->dp_root_dir, dp); in dsl_pool_close()
377 bpobj_close(&dp->dp_free_bpobj); in dsl_pool_close()
378 bpobj_close(&dp->dp_obsolete_bpobj); in dsl_pool_close()
381 if (dp->dp_meta_objset != NULL) in dsl_pool_close()
382 dmu_objset_evict(dp->dp_meta_objset); in dsl_pool_close()
384 txg_list_destroy(&dp->dp_dirty_datasets); in dsl_pool_close()
385 txg_list_destroy(&dp->dp_dirty_zilogs); in dsl_pool_close()
386 txg_list_destroy(&dp->dp_sync_tasks); in dsl_pool_close()
387 txg_list_destroy(&dp->dp_early_sync_tasks); in dsl_pool_close()
388 txg_list_destroy(&dp->dp_dirty_dirs); in dsl_pool_close()
390 taskq_destroy(dp->dp_zil_clean_taskq); in dsl_pool_close()
391 taskq_destroy(dp->dp_sync_taskq); in dsl_pool_close()
399 arc_flush(dp->dp_spa, FALSE); in dsl_pool_close()
401 mmp_fini(dp->dp_spa); in dsl_pool_close()
402 txg_fini(dp); in dsl_pool_close()
403 dsl_scan_fini(dp); in dsl_pool_close()
406 rrw_destroy(&dp->dp_config_rwlock); in dsl_pool_close()
407 mutex_destroy(&dp->dp_lock); in dsl_pool_close()
408 taskq_destroy(dp->dp_unlinked_drain_taskq); in dsl_pool_close()
409 taskq_destroy(dp->dp_vnrele_taskq); in dsl_pool_close()
410 if (dp->dp_blkstats != NULL) in dsl_pool_close()
411 kmem_free(dp->dp_blkstats, sizeof (zfs_all_blkstats_t)); in dsl_pool_close()
412 kmem_free(dp, sizeof (dsl_pool_t)); in dsl_pool_close()
416 dsl_pool_create_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_create_obsolete_bpobj() argument
423 ASSERT(spa_feature_is_active(dp->dp_spa, SPA_FEATURE_DEVICE_REMOVAL)); in dsl_pool_create_obsolete_bpobj()
425 obj = bpobj_alloc(dp->dp_meta_objset, SPA_OLD_MAXBLOCKSIZE, tx); in dsl_pool_create_obsolete_bpobj()
426 VERIFY0(bpobj_open(&dp->dp_obsolete_bpobj, dp->dp_meta_objset, obj)); in dsl_pool_create_obsolete_bpobj()
427 VERIFY0(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create_obsolete_bpobj()
429 spa_feature_incr(dp->dp_spa, SPA_FEATURE_OBSOLETE_COUNTS, tx); in dsl_pool_create_obsolete_bpobj()
433 dsl_pool_destroy_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_destroy_obsolete_bpobj() argument
435 spa_feature_decr(dp->dp_spa, SPA_FEATURE_OBSOLETE_COUNTS, tx); in dsl_pool_destroy_obsolete_bpobj()
436 VERIFY0(zap_remove(dp->dp_meta_objset, in dsl_pool_destroy_obsolete_bpobj()
439 bpobj_free(dp->dp_meta_objset, in dsl_pool_destroy_obsolete_bpobj()
440 dp->dp_obsolete_bpobj.bpo_object, tx); in dsl_pool_destroy_obsolete_bpobj()
441 bpobj_close(&dp->dp_obsolete_bpobj); in dsl_pool_destroy_obsolete_bpobj()
449 dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); in dsl_pool_create() local
450 dmu_tx_t *tx = dmu_tx_create_assigned(dp, txg); in dsl_pool_create()
454 rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); in dsl_pool_create()
457 dp->dp_meta_objset = dmu_objset_create_impl(spa, in dsl_pool_create()
458 NULL, &dp->dp_meta_rootbp, DMU_OST_META, tx); in dsl_pool_create()
459 spa->spa_meta_objset = dp->dp_meta_objset; in dsl_pool_create()
462 err = zap_create_claim(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create()
467 VERIFY0(dsl_scan_init(dp, txg)); in dsl_pool_create()
470 dp->dp_root_dir_obj = dsl_dir_create_sync(dp, NULL, NULL, tx); in dsl_pool_create()
471 VERIFY0(dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, in dsl_pool_create()
472 NULL, dp, &dp->dp_root_dir)); in dsl_pool_create()
475 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, MOS_DIR_NAME, tx); in dsl_pool_create()
476 VERIFY0(dsl_pool_open_special_dir(dp, in dsl_pool_create()
477 MOS_DIR_NAME, &dp->dp_mos_dir)); in dsl_pool_create()
481 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, in dsl_pool_create()
483 VERIFY0(dsl_pool_open_special_dir(dp, in dsl_pool_create()
484 FREE_DIR_NAME, &dp->dp_free_dir)); in dsl_pool_create()
487 obj = bpobj_alloc(dp->dp_meta_objset, SPA_OLD_MAXBLOCKSIZE, tx); in dsl_pool_create()
488 VERIFY(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create()
490 VERIFY0(bpobj_open(&dp->dp_free_bpobj, in dsl_pool_create()
491 dp->dp_meta_objset, obj)); in dsl_pool_create()
495 dsl_pool_create_origin(dp, tx); in dsl_pool_create()
509 obj = dsl_dataset_create_sync_dd(dp->dp_root_dir, NULL, dcp, 0, tx); in dsl_pool_create()
512 VERIFY0(dsl_dataset_hold_obj_flags(dp, obj, in dsl_pool_create()
518 os = dmu_objset_create_impl(dp->dp_spa, ds, in dsl_pool_create()
528 rrw_exit(&dp->dp_config_rwlock, FTAG); in dsl_pool_create()
530 return (dp); in dsl_pool_create()
537 dsl_pool_mos_diduse_space(dsl_pool_t *dp, in dsl_pool_mos_diduse_space() argument
541 mutex_enter(&dp->dp_lock); in dsl_pool_mos_diduse_space()
542 dp->dp_mos_used_delta += used; in dsl_pool_mos_diduse_space()
543 dp->dp_mos_compressed_delta += comp; in dsl_pool_mos_diduse_space()
544 dp->dp_mos_uncompressed_delta += uncomp; in dsl_pool_mos_diduse_space()
545 mutex_exit(&dp->dp_lock); in dsl_pool_mos_diduse_space()
549 dsl_pool_sync_mos(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_sync_mos() argument
551 zio_t *zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync_mos()
552 dmu_objset_sync(dp->dp_meta_objset, zio, tx); in dsl_pool_sync_mos()
554 dprintf_bp(&dp->dp_meta_rootbp, "meta objset rootbp is %s", ""); in dsl_pool_sync_mos()
555 spa_set_rootblkptr(dp->dp_spa, &dp->dp_meta_rootbp); in dsl_pool_sync_mos()
559 dsl_pool_dirty_delta(dsl_pool_t *dp, int64_t delta) in dsl_pool_dirty_delta() argument
561 ASSERT(MUTEX_HELD(&dp->dp_lock)); in dsl_pool_dirty_delta()
564 ASSERT3U(-delta, <=, dp->dp_dirty_total); in dsl_pool_dirty_delta()
566 dp->dp_dirty_total += delta; in dsl_pool_dirty_delta()
572 if (dp->dp_dirty_total < zfs_dirty_data_max) in dsl_pool_dirty_delta()
573 cv_signal(&dp->dp_spaceavail_cv); in dsl_pool_dirty_delta()
577 dsl_early_sync_task_verify(dsl_pool_t *dp, uint64_t txg) in dsl_early_sync_task_verify() argument
579 spa_t *spa = dp->dp_spa; in dsl_early_sync_task_verify()
598 dsl_pool_sync(dsl_pool_t *dp, uint64_t txg) in dsl_pool_sync() argument
604 objset_t *mos = dp->dp_meta_objset; in dsl_pool_sync()
610 tx = dmu_tx_create_assigned(dp, txg); in dsl_pool_sync()
617 if (!txg_list_empty(&dp->dp_early_sync_tasks, txg)) { in dsl_pool_sync()
620 ASSERT3U(spa_sync_pass(dp->dp_spa), ==, 1); in dsl_pool_sync()
622 txg_list_remove(&dp->dp_early_sync_tasks, txg)) != NULL) { in dsl_pool_sync()
623 ASSERT(dsl_early_sync_task_verify(dp, txg)); in dsl_pool_sync()
626 ASSERT(dsl_early_sync_task_verify(dp, txg)); in dsl_pool_sync()
632 zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync()
633 while ((ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) != NULL) { in dsl_pool_sync()
652 dsl_pool_undirty_space(dp, dp->dp_dirty_pertxg[txg & TXG_MASK], txg); in dsl_pool_sync()
658 mutex_enter(&dp->dp_lock); in dsl_pool_sync()
659 ASSERT(spa_sync_pass(dp->dp_spa) == 1 || in dsl_pool_sync()
660 dp->dp_long_free_dirty_pertxg[txg & TXG_MASK] == 0); in dsl_pool_sync()
661 dp->dp_long_free_dirty_pertxg[txg & TXG_MASK] = 0; in dsl_pool_sync()
662 mutex_exit(&dp->dp_lock); in dsl_pool_sync()
674 taskq_wait(dp->dp_sync_taskq); in dsl_pool_sync()
683 zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync()
684 while ((ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) != NULL) { in dsl_pool_sync()
699 key_mapping_rele(dp->dp_spa, ds->ds_key_mapping, ds); in dsl_pool_sync()
718 key_mapping_rele(dp->dp_spa, ds->ds_key_mapping, ds); in dsl_pool_sync()
723 while ((dd = txg_list_remove(&dp->dp_dirty_dirs, txg)) != NULL) { in dsl_pool_sync()
732 if (dp->dp_mos_used_delta != 0 || dp->dp_mos_compressed_delta != 0 || in dsl_pool_sync()
733 dp->dp_mos_uncompressed_delta != 0) { in dsl_pool_sync()
734 dsl_dir_diduse_space(dp->dp_mos_dir, DD_USED_HEAD, in dsl_pool_sync()
735 dp->dp_mos_used_delta, in dsl_pool_sync()
736 dp->dp_mos_compressed_delta, in dsl_pool_sync()
737 dp->dp_mos_uncompressed_delta, tx); in dsl_pool_sync()
738 dp->dp_mos_used_delta = 0; in dsl_pool_sync()
739 dp->dp_mos_compressed_delta = 0; in dsl_pool_sync()
740 dp->dp_mos_uncompressed_delta = 0; in dsl_pool_sync()
744 dsl_pool_sync_mos(dp, tx); in dsl_pool_sync()
756 if (!txg_list_empty(&dp->dp_sync_tasks, txg)) { in dsl_pool_sync()
762 ASSERT3U(spa_sync_pass(dp->dp_spa), ==, 1); in dsl_pool_sync()
763 while ((dst = txg_list_remove(&dp->dp_sync_tasks, txg)) != NULL) in dsl_pool_sync()
769 DTRACE_PROBE2(dsl_pool_sync__done, dsl_pool_t *dp, dp, uint64_t, txg); in dsl_pool_sync()
773 dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg) in dsl_pool_sync_done() argument
777 while (zilog = txg_list_head(&dp->dp_dirty_zilogs, txg)) { in dsl_pool_sync_done()
786 (void) txg_list_remove_this(&dp->dp_dirty_zilogs, zilog, txg); in dsl_pool_sync_done()
790 ASSERT(!dmu_objset_is_dirty(dp->dp_meta_objset, txg)); in dsl_pool_sync_done()
798 dsl_pool_sync_context(dsl_pool_t *dp) in dsl_pool_sync_context() argument
800 return (curthread == dp->dp_tx.tx_sync_thread || in dsl_pool_sync_context()
801 spa_is_initializing(dp->dp_spa) || in dsl_pool_sync_context()
802 taskq_member(dp->dp_sync_taskq, curthread)); in dsl_pool_sync_context()
825 dsl_pool_adjustedsize(dsl_pool_t *dp, zfs_space_check_t slop_policy) in dsl_pool_adjustedsize() argument
827 spa_t *spa = dp->dp_spa; in dsl_pool_adjustedsize()
858 dsl_pool_unreserved_space(dsl_pool_t *dp, zfs_space_check_t slop_policy) in dsl_pool_unreserved_space() argument
860 uint64_t poolsize = dsl_pool_adjustedsize(dp, slop_policy); in dsl_pool_unreserved_space()
862 metaslab_class_get_deferred(spa_normal_class(dp->dp_spa)); in dsl_pool_unreserved_space()
868 dsl_pool_need_dirty_delay(dsl_pool_t *dp) in dsl_pool_need_dirty_delay() argument
876 mutex_enter(&dp->dp_lock); in dsl_pool_need_dirty_delay()
877 if (dp->dp_dirty_total > dirty_min_bytes) in dsl_pool_need_dirty_delay()
878 txg_kick(dp); in dsl_pool_need_dirty_delay()
879 rv = (dp->dp_dirty_total > delay_min_bytes); in dsl_pool_need_dirty_delay()
880 mutex_exit(&dp->dp_lock); in dsl_pool_need_dirty_delay()
885 dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx) in dsl_pool_dirty_space() argument
888 mutex_enter(&dp->dp_lock); in dsl_pool_dirty_space()
889 dp->dp_dirty_pertxg[tx->tx_txg & TXG_MASK] += space; in dsl_pool_dirty_space()
890 dsl_pool_dirty_delta(dp, space); in dsl_pool_dirty_space()
891 mutex_exit(&dp->dp_lock); in dsl_pool_dirty_space()
896 dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg) in dsl_pool_undirty_space() argument
901 mutex_enter(&dp->dp_lock); in dsl_pool_undirty_space()
902 if (dp->dp_dirty_pertxg[txg & TXG_MASK] < space) { in dsl_pool_undirty_space()
904 space = dp->dp_dirty_pertxg[txg & TXG_MASK]; in dsl_pool_undirty_space()
906 ASSERT3U(dp->dp_dirty_pertxg[txg & TXG_MASK], >=, space); in dsl_pool_undirty_space()
907 dp->dp_dirty_pertxg[txg & TXG_MASK] -= space; in dsl_pool_undirty_space()
908 ASSERT3U(dp->dp_dirty_total, >=, space); in dsl_pool_undirty_space()
909 dsl_pool_dirty_delta(dp, -space); in dsl_pool_undirty_space()
910 mutex_exit(&dp->dp_lock); in dsl_pool_undirty_space()
915 upgrade_clones_cb(dsl_pool_t *dp, dsl_dataset_t *hds, void *arg) in upgrade_clones_cb() argument
921 err = dsl_dataset_hold_obj(dp, hds->ds_object, FTAG, &ds); in upgrade_clones_cb()
926 err = dsl_dataset_hold_obj(dp, in upgrade_clones_cb()
941 prev = dp->dp_origin_snap; in upgrade_clones_cb()
970 VERIFY0(dsl_dataset_hold_obj(dp, in upgrade_clones_cb()
982 zap_create(dp->dp_meta_objset, in upgrade_clones_cb()
985 VERIFY0(zap_add_int(dp->dp_meta_objset, in upgrade_clones_cb()
989 if (prev != dp->dp_origin_snap) in upgrade_clones_cb()
995 dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_upgrade_clones() argument
998 ASSERT(dp->dp_origin_snap != NULL); in dsl_pool_upgrade_clones()
1000 VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, upgrade_clones_cb, in dsl_pool_upgrade_clones()
1006 upgrade_dir_clones_cb(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) in upgrade_dir_clones_cb() argument
1009 objset_t *mos = dp->dp_meta_objset; in upgrade_dir_clones_cb()
1014 VERIFY0(dsl_dataset_hold_obj(dp, in upgrade_dir_clones_cb()
1024 VERIFY0(zap_add_int(dp->dp_meta_objset, in upgrade_dir_clones_cb()
1034 dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_upgrade_dir_clones() argument
1039 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, FREE_DIR_NAME, tx); in dsl_pool_upgrade_dir_clones()
1040 VERIFY0(dsl_pool_open_special_dir(dp, in dsl_pool_upgrade_dir_clones()
1041 FREE_DIR_NAME, &dp->dp_free_dir)); in dsl_pool_upgrade_dir_clones()
1048 obj = dmu_object_alloc(dp->dp_meta_objset, DMU_OT_BPOBJ, in dsl_pool_upgrade_dir_clones()
1050 VERIFY0(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_upgrade_dir_clones()
1052 VERIFY0(bpobj_open(&dp->dp_free_bpobj, dp->dp_meta_objset, obj)); in dsl_pool_upgrade_dir_clones()
1054 VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, in dsl_pool_upgrade_dir_clones()
1059 dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_create_origin() argument
1065 ASSERT(dp->dp_origin_snap == NULL); in dsl_pool_create_origin()
1066 ASSERT(rrw_held(&dp->dp_config_rwlock, RW_WRITER)); in dsl_pool_create_origin()
1069 dsobj = dsl_dataset_create_sync(dp->dp_root_dir, ORIGIN_DIR_NAME, in dsl_pool_create_origin()
1071 VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); in dsl_pool_create_origin()
1073 VERIFY0(dsl_dataset_hold_obj(dp, dsl_dataset_phys(ds)->ds_prev_snap_obj, in dsl_pool_create_origin()
1074 dp, &dp->dp_origin_snap)); in dsl_pool_create_origin()
1079 dsl_pool_vnrele_taskq(dsl_pool_t *dp) in dsl_pool_vnrele_taskq() argument
1081 return (dp->dp_vnrele_taskq); in dsl_pool_vnrele_taskq()
1085 dsl_pool_unlinked_drain_taskq(dsl_pool_t *dp) in dsl_pool_unlinked_drain_taskq() argument
1087 return (dp->dp_unlinked_drain_taskq); in dsl_pool_unlinked_drain_taskq()
1095 dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp) in dsl_pool_clean_tmp_userrefs() argument
1099 objset_t *mos = dp->dp_meta_objset; in dsl_pool_clean_tmp_userrefs()
1100 uint64_t zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_clean_tmp_userrefs()
1105 ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); in dsl_pool_clean_tmp_userrefs()
1127 dsl_dataset_user_release_tmp(dp, holds); in dsl_pool_clean_tmp_userrefs()
1136 dsl_pool_user_hold_create_obj(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_user_hold_create_obj() argument
1138 objset_t *mos = dp->dp_meta_objset; in dsl_pool_user_hold_create_obj()
1140 ASSERT(dp->dp_tmp_userrefs_obj == 0); in dsl_pool_user_hold_create_obj()
1143 dp->dp_tmp_userrefs_obj = zap_create_link(mos, DMU_OT_USERREFS, in dsl_pool_user_hold_create_obj()
1148 dsl_pool_user_hold_rele_impl(dsl_pool_t *dp, uint64_t dsobj, in dsl_pool_user_hold_rele_impl() argument
1151 objset_t *mos = dp->dp_meta_objset; in dsl_pool_user_hold_rele_impl()
1152 uint64_t zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_user_hold_rele_impl()
1156 ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); in dsl_pool_user_hold_rele_impl()
1165 dsl_pool_user_hold_create_obj(dp, tx); in dsl_pool_user_hold_rele_impl()
1166 zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_user_hold_rele_impl()
1186 dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj, const char *tag, in dsl_pool_user_hold() argument
1189 return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, now, tx, B_TRUE)); in dsl_pool_user_hold()
1196 dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj, const char *tag, in dsl_pool_user_release() argument
1199 return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, 0, tx, B_FALSE)); in dsl_pool_user_release()
1254 dsl_pool_hold(const char *name, void *tag, dsl_pool_t **dp) in dsl_pool_hold() argument
1261 *dp = spa_get_dsl(spa); in dsl_pool_hold()
1262 dsl_pool_config_enter(*dp, tag); in dsl_pool_hold()
1268 dsl_pool_rele(dsl_pool_t *dp, void *tag) in dsl_pool_rele() argument
1270 dsl_pool_config_exit(dp, tag); in dsl_pool_rele()
1271 spa_close(dp->dp_spa, tag); in dsl_pool_rele()
1275 dsl_pool_config_enter(dsl_pool_t *dp, void *tag) in dsl_pool_config_enter() argument
1289 ASSERT(!rrw_held(&dp->dp_config_rwlock, RW_READER)); in dsl_pool_config_enter()
1290 rrw_enter(&dp->dp_config_rwlock, RW_READER, tag); in dsl_pool_config_enter()
1294 dsl_pool_config_enter_prio(dsl_pool_t *dp, void *tag) in dsl_pool_config_enter_prio() argument
1296 ASSERT(!rrw_held(&dp->dp_config_rwlock, RW_READER)); in dsl_pool_config_enter_prio()
1297 rrw_enter_read_prio(&dp->dp_config_rwlock, tag); in dsl_pool_config_enter_prio()
1301 dsl_pool_config_exit(dsl_pool_t *dp, void *tag) in dsl_pool_config_exit() argument
1303 rrw_exit(&dp->dp_config_rwlock, tag); in dsl_pool_config_exit()
1307 dsl_pool_config_held(dsl_pool_t *dp) in dsl_pool_config_held() argument
1309 return (RRW_LOCK_HELD(&dp->dp_config_rwlock)); in dsl_pool_config_held()
1313 dsl_pool_config_held_writer(dsl_pool_t *dp) in dsl_pool_config_held_writer() argument
1315 return (RRW_WRITE_HELD(&dp->dp_config_rwlock)); in dsl_pool_config_held_writer()