Lines Matching refs:dp

57 dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **ddp)  in dsl_pool_open_special_dir()  argument
62 err = zap_lookup(dp->dp_meta_objset, in dsl_pool_open_special_dir()
63 dp->dp_root_dir->dd_phys->dd_child_dir_zapobj, in dsl_pool_open_special_dir()
68 return (dsl_dir_open_obj(dp, obj, name, dp, ddp)); in dsl_pool_open_special_dir()
74 dsl_pool_t *dp; in dsl_pool_open_impl() local
77 dp = kmem_zalloc(sizeof (dsl_pool_t), KM_SLEEP); in dsl_pool_open_impl()
78 dp->dp_spa = spa; in dsl_pool_open_impl()
79 dp->dp_meta_rootbp = *bp; in dsl_pool_open_impl()
80 rw_init(&dp->dp_config_rwlock, NULL, RW_DEFAULT, NULL); in dsl_pool_open_impl()
81 dp->dp_write_limit = zfs_write_limit_min; in dsl_pool_open_impl()
82 txg_init(dp, txg); in dsl_pool_open_impl()
84 txg_list_create(&dp->dp_dirty_datasets, in dsl_pool_open_impl()
86 txg_list_create(&dp->dp_dirty_dirs, in dsl_pool_open_impl()
88 txg_list_create(&dp->dp_sync_tasks, in dsl_pool_open_impl()
90 list_create(&dp->dp_synced_datasets, sizeof (dsl_dataset_t), in dsl_pool_open_impl()
93 mutex_init(&dp->dp_lock, NULL, MUTEX_DEFAULT, NULL); in dsl_pool_open_impl()
95 dp->dp_vnrele_taskq = taskq_create("zfs_vn_rele_taskq", 1, minclsyspri, in dsl_pool_open_impl()
98 return (dp); in dsl_pool_open_impl()
105 dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); in dsl_pool_open() local
110 rw_enter(&dp->dp_config_rwlock, RW_WRITER); in dsl_pool_open()
111 err = dmu_objset_open_impl(spa, NULL, &dp->dp_meta_rootbp, in dsl_pool_open()
112 &dp->dp_meta_objset); in dsl_pool_open()
116 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
118 &dp->dp_root_dir_obj); in dsl_pool_open()
122 err = dsl_dir_open_obj(dp, dp->dp_root_dir_obj, in dsl_pool_open()
123 NULL, dp, &dp->dp_root_dir); in dsl_pool_open()
127 err = dsl_pool_open_special_dir(dp, MOS_DIR_NAME, &dp->dp_mos_dir); in dsl_pool_open()
132 err = dsl_pool_open_special_dir(dp, ORIGIN_DIR_NAME, &dd); in dsl_pool_open()
135 err = dsl_dataset_hold_obj(dp, dd->dd_phys->dd_head_dataset_obj, in dsl_pool_open()
138 err = dsl_dataset_hold_obj(dp, in dsl_pool_open()
139 ds->ds_phys->ds_prev_snap_obj, dp, in dsl_pool_open()
140 &dp->dp_origin_snap); in dsl_pool_open()
143 dsl_dir_close(dd, dp); in dsl_pool_open()
149 err = dsl_pool_open_special_dir(dp, FREE_DIR_NAME, in dsl_pool_open()
150 &dp->dp_free_dir); in dsl_pool_open()
154 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
158 VERIFY3U(0, ==, bpobj_open(&dp->dp_free_bpobj, in dsl_pool_open()
159 dp->dp_meta_objset, obj)); in dsl_pool_open()
162 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
164 &dp->dp_tmp_userrefs_obj); in dsl_pool_open()
170 err = dsl_scan_init(dp, txg); in dsl_pool_open()
173 rw_exit(&dp->dp_config_rwlock); in dsl_pool_open()
175 dsl_pool_close(dp); in dsl_pool_open()
177 *dpp = dp; in dsl_pool_open()
183 dsl_pool_close(dsl_pool_t *dp) in dsl_pool_close() argument
192 if (dp->dp_origin_snap) in dsl_pool_close()
193 dsl_dataset_drop_ref(dp->dp_origin_snap, dp); in dsl_pool_close()
194 if (dp->dp_mos_dir) in dsl_pool_close()
195 dsl_dir_close(dp->dp_mos_dir, dp); in dsl_pool_close()
196 if (dp->dp_free_dir) in dsl_pool_close()
197 dsl_dir_close(dp->dp_free_dir, dp); in dsl_pool_close()
198 if (dp->dp_root_dir) in dsl_pool_close()
199 dsl_dir_close(dp->dp_root_dir, dp); in dsl_pool_close()
201 bpobj_close(&dp->dp_free_bpobj); in dsl_pool_close()
204 if (dp->dp_meta_objset) in dsl_pool_close()
205 dmu_objset_evict(dp->dp_meta_objset); in dsl_pool_close()
207 txg_list_destroy(&dp->dp_dirty_datasets); in dsl_pool_close()
208 txg_list_destroy(&dp->dp_sync_tasks); in dsl_pool_close()
209 txg_list_destroy(&dp->dp_dirty_dirs); in dsl_pool_close()
210 list_destroy(&dp->dp_synced_datasets); in dsl_pool_close()
212 arc_flush(dp->dp_spa); in dsl_pool_close()
213 txg_fini(dp); in dsl_pool_close()
214 dsl_scan_fini(dp); in dsl_pool_close()
215 rw_destroy(&dp->dp_config_rwlock); in dsl_pool_close()
216 mutex_destroy(&dp->dp_lock); in dsl_pool_close()
217 taskq_destroy(dp->dp_vnrele_taskq); in dsl_pool_close()
218 if (dp->dp_blkstats) in dsl_pool_close()
219 kmem_free(dp->dp_blkstats, sizeof (zfs_all_blkstats_t)); in dsl_pool_close()
220 kmem_free(dp, sizeof (dsl_pool_t)); in dsl_pool_close()
227 dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); in dsl_pool_create() local
228 dmu_tx_t *tx = dmu_tx_create_assigned(dp, txg); in dsl_pool_create()
234 dp->dp_meta_objset = dmu_objset_create_impl(spa, in dsl_pool_create()
235 NULL, &dp->dp_meta_rootbp, DMU_OST_META, tx); in dsl_pool_create()
238 err = zap_create_claim(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create()
243 VERIFY3U(0, ==, dsl_scan_init(dp, txg)); in dsl_pool_create()
246 dp->dp_root_dir_obj = dsl_dir_create_sync(dp, NULL, NULL, tx); in dsl_pool_create()
247 VERIFY(0 == dsl_dir_open_obj(dp, dp->dp_root_dir_obj, in dsl_pool_create()
248 NULL, dp, &dp->dp_root_dir)); in dsl_pool_create()
251 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, MOS_DIR_NAME, tx); in dsl_pool_create()
252 VERIFY(0 == dsl_pool_open_special_dir(dp, in dsl_pool_create()
253 MOS_DIR_NAME, &dp->dp_mos_dir)); in dsl_pool_create()
257 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, in dsl_pool_create()
259 VERIFY(0 == dsl_pool_open_special_dir(dp, in dsl_pool_create()
260 FREE_DIR_NAME, &dp->dp_free_dir)); in dsl_pool_create()
263 obj = bpobj_alloc(dp->dp_meta_objset, SPA_MAXBLOCKSIZE, tx); in dsl_pool_create()
264 VERIFY(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create()
266 VERIFY3U(0, ==, bpobj_open(&dp->dp_free_bpobj, in dsl_pool_create()
267 dp->dp_meta_objset, obj)); in dsl_pool_create()
271 dsl_pool_create_origin(dp, tx); in dsl_pool_create()
274 obj = dsl_dataset_create_sync_dd(dp->dp_root_dir, NULL, 0, tx); in dsl_pool_create()
277 VERIFY(0 == dsl_dataset_hold_obj(dp, obj, FTAG, &ds)); in dsl_pool_create()
278 os = dmu_objset_create_impl(dp->dp_spa, ds, in dsl_pool_create()
287 return (dp); in dsl_pool_create()
299 dsl_pool_sync(dsl_pool_t *dp, uint64_t txg) in dsl_pool_sync() argument
306 objset_t *mos = dp->dp_meta_objset; in dsl_pool_sync()
317 data_written = dp->dp_space_towrite[txg & TXG_MASK]; in dsl_pool_sync()
319 tx = dmu_tx_create_assigned(dp, txg); in dsl_pool_sync()
321 dp->dp_read_overhead = 0; in dsl_pool_sync()
324 zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync()
325 while (ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) { in dsl_pool_sync()
332 list_insert_tail(&dp->dp_synced_datasets, ds); in dsl_pool_sync()
342 for (ds = list_head(&dp->dp_synced_datasets); ds; in dsl_pool_sync()
343 ds = list_next(&dp->dp_synced_datasets, ds)) in dsl_pool_sync()
352 zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync()
353 while (ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) { in dsl_pool_sync()
364 for (ds = list_head(&dp->dp_synced_datasets); ds; in dsl_pool_sync()
365 ds = list_next(&dp->dp_synced_datasets, ds)) { in dsl_pool_sync()
370 while (dstg = txg_list_remove(&dp->dp_sync_tasks, txg)) { in dsl_pool_sync()
375 ASSERT(spa_sync_pass(dp->dp_spa) == 1); in dsl_pool_sync()
381 while (dd = txg_list_remove(&dp->dp_dirty_dirs, txg)) in dsl_pool_sync()
388 zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync()
392 dprintf_bp(&dp->dp_meta_rootbp, "meta objset rootbp is %s", ""); in dsl_pool_sync()
393 spa_set_rootblkptr(dp->dp_spa, &dp->dp_meta_rootbp); in dsl_pool_sync()
397 hrtime_t, dp->dp_read_overhead); in dsl_pool_sync()
398 write_time -= dp->dp_read_overhead; in dsl_pool_sync()
402 dp->dp_space_towrite[txg & TXG_MASK] = 0; in dsl_pool_sync()
403 ASSERT(dp->dp_tempreserved[txg & TXG_MASK] == 0); in dsl_pool_sync()
417 spa_get_asize(dp->dp_spa, zfs_write_limit_max)); in dsl_pool_sync()
434 if (dp->dp_throughput) in dsl_pool_sync()
435 dp->dp_throughput = throughput / 4 + in dsl_pool_sync()
436 3 * dp->dp_throughput / 4; in dsl_pool_sync()
438 dp->dp_throughput = throughput; in dsl_pool_sync()
439 dp->dp_write_limit = MIN(zfs_write_limit_inflated, in dsl_pool_sync()
441 dp->dp_throughput * zfs_txg_synctime_ms)); in dsl_pool_sync()
446 dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg) in dsl_pool_sync_done() argument
451 while (ds = list_head(&dp->dp_synced_datasets)) { in dsl_pool_sync_done()
452 list_remove(&dp->dp_synced_datasets, ds); in dsl_pool_sync_done()
458 ASSERT(!dmu_objset_is_dirty(dp->dp_meta_objset, txg)); in dsl_pool_sync_done()
466 dsl_pool_sync_context(dsl_pool_t *dp) in dsl_pool_sync_context() argument
468 return (curthread == dp->dp_tx.tx_sync_thread || in dsl_pool_sync_context()
469 spa_get_dsl(dp->dp_spa) == NULL); in dsl_pool_sync_context()
473 dsl_pool_adjustedsize(dsl_pool_t *dp, boolean_t netfree) in dsl_pool_adjustedsize() argument
487 space = spa_get_dspace(dp->dp_spa); in dsl_pool_adjustedsize()
496 dsl_pool_tempreserve_space(dsl_pool_t *dp, uint64_t space, dmu_tx_t *tx) in dsl_pool_tempreserve_space() argument
500 zfs_write_limit_override : dp->dp_write_limit); in dsl_pool_tempreserve_space()
503 atomic_add_64(&dp->dp_tempreserved[tx->tx_txg & TXG_MASK], in dsl_pool_tempreserve_space()
517 reserved = dp->dp_space_towrite[tx->tx_txg & TXG_MASK] in dsl_pool_tempreserve_space()
518 + dp->dp_tempreserved[tx->tx_txg & TXG_MASK] / 2; in dsl_pool_tempreserve_space()
524 atomic_add_64(&dp->dp_tempreserved[tx->tx_txg & TXG_MASK], space); in dsl_pool_tempreserve_space()
532 txg_delay(dp, tx->tx_txg, 1); in dsl_pool_tempreserve_space()
538 dsl_pool_tempreserve_clear(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx) in dsl_pool_tempreserve_clear() argument
540 ASSERT(dp->dp_tempreserved[tx->tx_txg & TXG_MASK] >= space); in dsl_pool_tempreserve_clear()
541 atomic_add_64(&dp->dp_tempreserved[tx->tx_txg & TXG_MASK], -space); in dsl_pool_tempreserve_clear()
545 dsl_pool_memory_pressure(dsl_pool_t *dp) in dsl_pool_memory_pressure() argument
550 if (dp->dp_write_limit == zfs_write_limit_min) in dsl_pool_memory_pressure()
554 space_inuse += dp->dp_space_towrite[i]; in dsl_pool_memory_pressure()
555 space_inuse += dp->dp_tempreserved[i]; in dsl_pool_memory_pressure()
557 dp->dp_write_limit = MAX(zfs_write_limit_min, in dsl_pool_memory_pressure()
558 MIN(dp->dp_write_limit, space_inuse / 4)); in dsl_pool_memory_pressure()
562 dsl_pool_willuse_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx) in dsl_pool_willuse_space() argument
565 mutex_enter(&dp->dp_lock); in dsl_pool_willuse_space()
566 dp->dp_space_towrite[tx->tx_txg & TXG_MASK] += space; in dsl_pool_willuse_space()
567 mutex_exit(&dp->dp_lock); in dsl_pool_willuse_space()
578 dsl_pool_t *dp = spa_get_dsl(spa); in upgrade_clones_cb() local
580 err = dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds); in upgrade_clones_cb()
585 err = dsl_dataset_hold_obj(dp, ds->ds_phys->ds_prev_snap_obj, in upgrade_clones_cb()
600 prev = dp->dp_origin_snap; in upgrade_clones_cb()
626 VERIFY(0 == dsl_dataset_hold_obj(dp, in upgrade_clones_cb()
637 zap_create(dp->dp_meta_objset, in upgrade_clones_cb()
640 VERIFY(0 == zap_add_int(dp->dp_meta_objset, in upgrade_clones_cb()
644 if (prev != dp->dp_origin_snap) in upgrade_clones_cb()
650 dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_upgrade_clones() argument
653 ASSERT(dp->dp_origin_snap != NULL); in dsl_pool_upgrade_clones()
655 VERIFY3U(0, ==, dmu_objset_find_spa(dp->dp_spa, NULL, upgrade_clones_cb, in dsl_pool_upgrade_clones()
665 dsl_pool_t *dp = spa_get_dsl(spa); in upgrade_dir_clones_cb() local
666 objset_t *mos = dp->dp_meta_objset; in upgrade_dir_clones_cb()
668 VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); in upgrade_dir_clones_cb()
673 VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, in upgrade_dir_clones_cb()
682 VERIFY3U(0, ==, zap_add_int(dp->dp_meta_objset, in upgrade_dir_clones_cb()
693 dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_upgrade_dir_clones() argument
698 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, FREE_DIR_NAME, tx); in dsl_pool_upgrade_dir_clones()
699 VERIFY(0 == dsl_pool_open_special_dir(dp, in dsl_pool_upgrade_dir_clones()
700 FREE_DIR_NAME, &dp->dp_free_dir)); in dsl_pool_upgrade_dir_clones()
707 obj = dmu_object_alloc(dp->dp_meta_objset, DMU_OT_BPOBJ, in dsl_pool_upgrade_dir_clones()
709 VERIFY3U(0, ==, zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_upgrade_dir_clones()
711 VERIFY3U(0, ==, bpobj_open(&dp->dp_free_bpobj, in dsl_pool_upgrade_dir_clones()
712 dp->dp_meta_objset, obj)); in dsl_pool_upgrade_dir_clones()
714 VERIFY3U(0, ==, dmu_objset_find_spa(dp->dp_spa, NULL, in dsl_pool_upgrade_dir_clones()
719 dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_create_origin() argument
725 ASSERT(dp->dp_origin_snap == NULL); in dsl_pool_create_origin()
728 rw_enter(&dp->dp_config_rwlock, RW_WRITER); in dsl_pool_create_origin()
729 dsobj = dsl_dataset_create_sync(dp->dp_root_dir, ORIGIN_DIR_NAME, in dsl_pool_create_origin()
731 VERIFY(0 == dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); in dsl_pool_create_origin()
733 VERIFY(0 == dsl_dataset_hold_obj(dp, ds->ds_phys->ds_prev_snap_obj, in dsl_pool_create_origin()
734 dp, &dp->dp_origin_snap)); in dsl_pool_create_origin()
736 rw_exit(&dp->dp_config_rwlock); in dsl_pool_create_origin()
740 dsl_pool_vnrele_taskq(dsl_pool_t *dp) in dsl_pool_vnrele_taskq() argument
742 return (dp->dp_vnrele_taskq); in dsl_pool_vnrele_taskq()
750 dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp) in dsl_pool_clean_tmp_userrefs() argument
754 objset_t *mos = dp->dp_meta_objset; in dsl_pool_clean_tmp_userrefs()
755 uint64_t zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_clean_tmp_userrefs()
759 ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); in dsl_pool_clean_tmp_userrefs()
771 (void) dsl_dataset_user_release_tmp(dp, dsobj, htag, B_FALSE); in dsl_pool_clean_tmp_userrefs()
780 dsl_pool_user_hold_create_obj(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_user_hold_create_obj() argument
782 objset_t *mos = dp->dp_meta_objset; in dsl_pool_user_hold_create_obj()
784 ASSERT(dp->dp_tmp_userrefs_obj == 0); in dsl_pool_user_hold_create_obj()
787 dp->dp_tmp_userrefs_obj = zap_create(mos, DMU_OT_USERREFS, in dsl_pool_user_hold_create_obj()
791 sizeof (uint64_t), 1, &dp->dp_tmp_userrefs_obj, tx) == 0); in dsl_pool_user_hold_create_obj()
795 dsl_pool_user_hold_rele_impl(dsl_pool_t *dp, uint64_t dsobj, in dsl_pool_user_hold_rele_impl() argument
798 objset_t *mos = dp->dp_meta_objset; in dsl_pool_user_hold_rele_impl()
799 uint64_t zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_user_hold_rele_impl()
803 ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); in dsl_pool_user_hold_rele_impl()
812 dsl_pool_user_hold_create_obj(dp, tx); in dsl_pool_user_hold_rele_impl()
813 zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_user_hold_rele_impl()
833 dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj, const char *tag, in dsl_pool_user_hold() argument
836 return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, now, tx, B_TRUE)); in dsl_pool_user_hold()
843 dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj, const char *tag, in dsl_pool_user_release() argument
846 return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, NULL, in dsl_pool_user_release()