Lines Matching full:dp
174 dsl_pool_open_special_dir(dsl_pool_t *dp, const char *name, dsl_dir_t **ddp) in dsl_pool_open_special_dir() argument
179 err = zap_lookup(dp->dp_meta_objset, in dsl_pool_open_special_dir()
180 dsl_dir_phys(dp->dp_root_dir)->dd_child_dir_zapobj, in dsl_pool_open_special_dir()
185 return (dsl_dir_hold_obj(dp, obj, name, dp, ddp)); in dsl_pool_open_special_dir()
191 dsl_pool_t *dp; in dsl_pool_open_impl() local
194 dp = kmem_zalloc(sizeof (dsl_pool_t), KM_SLEEP); in dsl_pool_open_impl()
195 dp->dp_spa = spa; in dsl_pool_open_impl()
196 dp->dp_meta_rootbp = *bp; in dsl_pool_open_impl()
197 rrw_init(&dp->dp_config_rwlock, B_TRUE); in dsl_pool_open_impl()
198 txg_init(dp, txg); in dsl_pool_open_impl()
201 txg_list_create(&dp->dp_dirty_datasets, spa, in dsl_pool_open_impl()
203 txg_list_create(&dp->dp_dirty_zilogs, spa, in dsl_pool_open_impl()
205 txg_list_create(&dp->dp_dirty_dirs, spa, in dsl_pool_open_impl()
207 txg_list_create(&dp->dp_sync_tasks, spa, in dsl_pool_open_impl()
209 txg_list_create(&dp->dp_early_sync_tasks, spa, in dsl_pool_open_impl()
212 dp->dp_sync_taskq = spa_sync_tq_create(spa, "dp_sync_taskq"); in dsl_pool_open_impl()
214 dp->dp_zil_clean_taskq = taskq_create("dp_zil_clean_taskq", in dsl_pool_open_impl()
220 mutex_init(&dp->dp_lock, NULL, MUTEX_DEFAULT, NULL); in dsl_pool_open_impl()
221 cv_init(&dp->dp_spaceavail_cv, NULL, CV_DEFAULT, NULL); in dsl_pool_open_impl()
223 aggsum_init(&dp->dp_wrlog_total, 0); in dsl_pool_open_impl()
225 aggsum_init(&dp->dp_wrlog_pertxg[i], 0); in dsl_pool_open_impl()
228 dp->dp_zrele_taskq = taskq_create("z_zrele", 100, defclsyspri, in dsl_pool_open_impl()
231 dp->dp_unlinked_drain_taskq = taskq_create("z_unlinked_drain", in dsl_pool_open_impl()
235 return (dp); in dsl_pool_open_impl()
242 dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); in dsl_pool_init() local
250 *dpp = dp; in dsl_pool_init()
252 err = dmu_objset_open_impl(spa, NULL, &dp->dp_meta_rootbp, in dsl_pool_init()
253 &dp->dp_meta_objset); in dsl_pool_init()
255 dsl_pool_close(dp); in dsl_pool_init()
263 dsl_pool_open(dsl_pool_t *dp) in dsl_pool_open() argument
270 rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); in dsl_pool_open()
271 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
273 &dp->dp_root_dir_obj); in dsl_pool_open()
277 err = dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, in dsl_pool_open()
278 NULL, dp, &dp->dp_root_dir); in dsl_pool_open()
282 err = dsl_pool_open_special_dir(dp, MOS_DIR_NAME, &dp->dp_mos_dir); in dsl_pool_open()
286 if (spa_version(dp->dp_spa) >= SPA_VERSION_ORIGIN) { in dsl_pool_open()
287 err = dsl_pool_open_special_dir(dp, ORIGIN_DIR_NAME, &dd); in dsl_pool_open()
290 err = dsl_dataset_hold_obj(dp, in dsl_pool_open()
293 err = dsl_dataset_hold_obj(dp, in dsl_pool_open()
294 dsl_dataset_phys(ds)->ds_prev_snap_obj, dp, in dsl_pool_open()
295 &dp->dp_origin_snap); in dsl_pool_open()
298 dsl_dir_rele(dd, dp); in dsl_pool_open()
303 if (spa_version(dp->dp_spa) >= SPA_VERSION_DEADLISTS) { in dsl_pool_open()
304 err = dsl_pool_open_special_dir(dp, FREE_DIR_NAME, in dsl_pool_open()
305 &dp->dp_free_dir); in dsl_pool_open()
309 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
313 VERIFY0(bpobj_open(&dp->dp_free_bpobj, in dsl_pool_open()
314 dp->dp_meta_objset, obj)); in dsl_pool_open()
317 if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_OBSOLETE_COUNTS)) { in dsl_pool_open()
318 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
321 VERIFY0(bpobj_open(&dp->dp_obsolete_bpobj, in dsl_pool_open()
322 dp->dp_meta_objset, obj)); in dsl_pool_open()
336 (void) dsl_pool_open_special_dir(dp, LEAK_DIR_NAME, in dsl_pool_open()
337 &dp->dp_leak_dir); in dsl_pool_open()
339 if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_ASYNC_DESTROY)) { in dsl_pool_open()
340 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
342 &dp->dp_bptree_obj); in dsl_pool_open()
347 if (spa_feature_is_active(dp->dp_spa, SPA_FEATURE_EMPTY_BPOBJ)) { in dsl_pool_open()
348 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
350 &dp->dp_empty_bpobj); in dsl_pool_open()
355 err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_open()
357 &dp->dp_tmp_userrefs_obj); in dsl_pool_open()
363 err = dsl_scan_init(dp, dp->dp_tx.tx_open_txg); in dsl_pool_open()
366 rrw_exit(&dp->dp_config_rwlock, FTAG); in dsl_pool_open()
371 dsl_pool_close(dsl_pool_t *dp) in dsl_pool_close() argument
380 if (dp->dp_origin_snap != NULL) in dsl_pool_close()
381 dsl_dataset_rele(dp->dp_origin_snap, dp); in dsl_pool_close()
382 if (dp->dp_mos_dir != NULL) in dsl_pool_close()
383 dsl_dir_rele(dp->dp_mos_dir, dp); in dsl_pool_close()
384 if (dp->dp_free_dir != NULL) in dsl_pool_close()
385 dsl_dir_rele(dp->dp_free_dir, dp); in dsl_pool_close()
386 if (dp->dp_leak_dir != NULL) in dsl_pool_close()
387 dsl_dir_rele(dp->dp_leak_dir, dp); in dsl_pool_close()
388 if (dp->dp_root_dir != NULL) in dsl_pool_close()
389 dsl_dir_rele(dp->dp_root_dir, dp); in dsl_pool_close()
391 bpobj_close(&dp->dp_free_bpobj); in dsl_pool_close()
392 bpobj_close(&dp->dp_obsolete_bpobj); in dsl_pool_close()
395 if (dp->dp_meta_objset != NULL) in dsl_pool_close()
396 dmu_objset_evict(dp->dp_meta_objset); in dsl_pool_close()
398 txg_list_destroy(&dp->dp_dirty_datasets); in dsl_pool_close()
399 txg_list_destroy(&dp->dp_dirty_zilogs); in dsl_pool_close()
400 txg_list_destroy(&dp->dp_sync_tasks); in dsl_pool_close()
401 txg_list_destroy(&dp->dp_early_sync_tasks); in dsl_pool_close()
402 txg_list_destroy(&dp->dp_dirty_dirs); in dsl_pool_close()
404 taskq_destroy(dp->dp_zil_clean_taskq); in dsl_pool_close()
405 spa_sync_tq_destroy(dp->dp_spa); in dsl_pool_close()
407 if (dp->dp_spa->spa_state == POOL_STATE_EXPORTED || in dsl_pool_close()
408 dp->dp_spa->spa_state == POOL_STATE_DESTROYED) { in dsl_pool_close()
412 arc_flush_async(dp->dp_spa); in dsl_pool_close()
420 arc_flush(dp->dp_spa, FALSE); in dsl_pool_close()
423 mmp_fini(dp->dp_spa); in dsl_pool_close()
424 txg_fini(dp); in dsl_pool_close()
425 dsl_scan_fini(dp); in dsl_pool_close()
428 rrw_destroy(&dp->dp_config_rwlock); in dsl_pool_close()
429 mutex_destroy(&dp->dp_lock); in dsl_pool_close()
430 cv_destroy(&dp->dp_spaceavail_cv); in dsl_pool_close()
432 ASSERT0(aggsum_value(&dp->dp_wrlog_total)); in dsl_pool_close()
433 aggsum_fini(&dp->dp_wrlog_total); in dsl_pool_close()
435 ASSERT0(aggsum_value(&dp->dp_wrlog_pertxg[i])); in dsl_pool_close()
436 aggsum_fini(&dp->dp_wrlog_pertxg[i]); in dsl_pool_close()
439 taskq_destroy(dp->dp_unlinked_drain_taskq); in dsl_pool_close()
440 taskq_destroy(dp->dp_zrele_taskq); in dsl_pool_close()
441 if (dp->dp_blkstats != NULL) in dsl_pool_close()
442 vmem_free(dp->dp_blkstats, sizeof (zfs_all_blkstats_t)); in dsl_pool_close()
443 kmem_free(dp, sizeof (dsl_pool_t)); in dsl_pool_close()
447 dsl_pool_create_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_create_obsolete_bpobj() argument
454 ASSERT(spa_feature_is_active(dp->dp_spa, SPA_FEATURE_DEVICE_REMOVAL)); in dsl_pool_create_obsolete_bpobj()
456 obj = bpobj_alloc(dp->dp_meta_objset, SPA_OLD_MAXBLOCKSIZE, tx); in dsl_pool_create_obsolete_bpobj()
457 VERIFY0(bpobj_open(&dp->dp_obsolete_bpobj, dp->dp_meta_objset, obj)); in dsl_pool_create_obsolete_bpobj()
458 VERIFY0(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create_obsolete_bpobj()
460 spa_feature_incr(dp->dp_spa, SPA_FEATURE_OBSOLETE_COUNTS, tx); in dsl_pool_create_obsolete_bpobj()
464 dsl_pool_destroy_obsolete_bpobj(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_destroy_obsolete_bpobj() argument
466 spa_feature_decr(dp->dp_spa, SPA_FEATURE_OBSOLETE_COUNTS, tx); in dsl_pool_destroy_obsolete_bpobj()
467 VERIFY0(zap_remove(dp->dp_meta_objset, in dsl_pool_destroy_obsolete_bpobj()
470 bpobj_free(dp->dp_meta_objset, in dsl_pool_destroy_obsolete_bpobj()
471 dp->dp_obsolete_bpobj.bpo_object, tx); in dsl_pool_destroy_obsolete_bpobj()
472 bpobj_close(&dp->dp_obsolete_bpobj); in dsl_pool_destroy_obsolete_bpobj()
480 dsl_pool_t *dp = dsl_pool_open_impl(spa, txg); in dsl_pool_create() local
481 dmu_tx_t *tx = dmu_tx_create_assigned(dp, txg); in dsl_pool_create()
490 rrw_enter(&dp->dp_config_rwlock, RW_WRITER, FTAG); in dsl_pool_create()
493 dp->dp_meta_objset = dmu_objset_create_impl(spa, in dsl_pool_create()
494 NULL, &dp->dp_meta_rootbp, DMU_OST_META, tx); in dsl_pool_create()
495 spa->spa_meta_objset = dp->dp_meta_objset; in dsl_pool_create()
498 err = zap_create_claim(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create()
503 VERIFY0(dsl_scan_init(dp, txg)); in dsl_pool_create()
506 dp->dp_root_dir_obj = dsl_dir_create_sync(dp, NULL, NULL, tx); in dsl_pool_create()
507 VERIFY0(dsl_dir_hold_obj(dp, dp->dp_root_dir_obj, in dsl_pool_create()
508 NULL, dp, &dp->dp_root_dir)); in dsl_pool_create()
511 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, MOS_DIR_NAME, tx); in dsl_pool_create()
512 VERIFY0(dsl_pool_open_special_dir(dp, in dsl_pool_create()
513 MOS_DIR_NAME, &dp->dp_mos_dir)); in dsl_pool_create()
517 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, in dsl_pool_create()
519 VERIFY0(dsl_pool_open_special_dir(dp, in dsl_pool_create()
520 FREE_DIR_NAME, &dp->dp_free_dir)); in dsl_pool_create()
523 obj = bpobj_alloc(dp->dp_meta_objset, SPA_OLD_MAXBLOCKSIZE, tx); in dsl_pool_create()
524 VERIFY(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_create()
526 VERIFY0(bpobj_open(&dp->dp_free_bpobj, in dsl_pool_create()
527 dp->dp_meta_objset, obj)); in dsl_pool_create()
531 dsl_pool_create_origin(dp, tx); in dsl_pool_create()
545 obj = dsl_dataset_create_sync_dd(dp->dp_root_dir, NULL, dcp, 0, tx); in dsl_pool_create()
548 VERIFY0(dsl_dataset_hold_obj_flags(dp, obj, in dsl_pool_create()
551 os = dmu_objset_create_impl(dp->dp_spa, ds, in dsl_pool_create()
561 rrw_exit(&dp->dp_config_rwlock, FTAG); in dsl_pool_create()
563 return (dp); in dsl_pool_create()
570 dsl_pool_mos_diduse_space(dsl_pool_t *dp, in dsl_pool_mos_diduse_space() argument
574 mutex_enter(&dp->dp_lock); in dsl_pool_mos_diduse_space()
575 dp->dp_mos_used_delta += used; in dsl_pool_mos_diduse_space()
576 dp->dp_mos_compressed_delta += comp; in dsl_pool_mos_diduse_space()
577 dp->dp_mos_uncompressed_delta += uncomp; in dsl_pool_mos_diduse_space()
578 mutex_exit(&dp->dp_lock); in dsl_pool_mos_diduse_space()
582 dsl_pool_sync_mos(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_sync_mos() argument
584 zio_t *zio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync_mos()
585 dmu_objset_sync(dp->dp_meta_objset, zio, tx); in dsl_pool_sync_mos()
587 dmu_objset_sync_done(dp->dp_meta_objset, tx); in dsl_pool_sync_mos()
588 taskq_wait(dp->dp_sync_taskq); in dsl_pool_sync_mos()
589 multilist_destroy(&dp->dp_meta_objset->os_synced_dnodes); in dsl_pool_sync_mos()
591 dprintf_bp(&dp->dp_meta_rootbp, "meta objset rootbp is %s", ""); in dsl_pool_sync_mos()
592 spa_set_rootblkptr(dp->dp_spa, &dp->dp_meta_rootbp); in dsl_pool_sync_mos()
596 dsl_pool_dirty_delta(dsl_pool_t *dp, int64_t delta) in dsl_pool_dirty_delta() argument
598 ASSERT(MUTEX_HELD(&dp->dp_lock)); in dsl_pool_dirty_delta()
601 ASSERT3U(-delta, <=, dp->dp_dirty_total); in dsl_pool_dirty_delta()
603 dp->dp_dirty_total += delta; in dsl_pool_dirty_delta()
609 if (dp->dp_dirty_total < zfs_dirty_data_max) in dsl_pool_dirty_delta()
610 cv_signal(&dp->dp_spaceavail_cv); in dsl_pool_dirty_delta()
614 dsl_pool_wrlog_count(dsl_pool_t *dp, int64_t size, uint64_t txg) in dsl_pool_wrlog_count() argument
618 aggsum_add(&dp->dp_wrlog_pertxg[txg & TXG_MASK], size); in dsl_pool_wrlog_count()
619 aggsum_add(&dp->dp_wrlog_total, size); in dsl_pool_wrlog_count()
624 if (aggsum_compare(&dp->dp_wrlog_pertxg[txg & TXG_MASK], sync_min) > 0) in dsl_pool_wrlog_count()
625 txg_kick(dp, txg); in dsl_pool_wrlog_count()
629 dsl_pool_need_wrlog_delay(dsl_pool_t *dp) in dsl_pool_need_wrlog_delay() argument
634 return (aggsum_compare(&dp->dp_wrlog_total, delay_min_bytes) > 0); in dsl_pool_need_wrlog_delay()
638 dsl_pool_wrlog_clear(dsl_pool_t *dp, uint64_t txg) in dsl_pool_wrlog_clear() argument
641 delta = -(int64_t)aggsum_value(&dp->dp_wrlog_pertxg[txg & TXG_MASK]); in dsl_pool_wrlog_clear()
642 aggsum_add(&dp->dp_wrlog_pertxg[txg & TXG_MASK], delta); in dsl_pool_wrlog_clear()
643 aggsum_add(&dp->dp_wrlog_total, delta); in dsl_pool_wrlog_clear()
645 (void) aggsum_value(&dp->dp_wrlog_pertxg[txg & TXG_MASK]); in dsl_pool_wrlog_clear()
646 (void) aggsum_value(&dp->dp_wrlog_total); in dsl_pool_wrlog_clear()
651 dsl_early_sync_task_verify(dsl_pool_t *dp, uint64_t txg) in dsl_early_sync_task_verify() argument
653 spa_t *spa = dp->dp_spa; in dsl_early_sync_task_verify()
671 #define dsl_early_sync_task_verify(dp, txg) \ argument
672 ((void) sizeof (dp), (void) sizeof (txg), B_TRUE)
676 dsl_pool_sync(dsl_pool_t *dp, uint64_t txg) in dsl_pool_sync() argument
682 objset_t *mos = dp->dp_meta_objset; in dsl_pool_sync()
688 tx = dmu_tx_create_assigned(dp, txg); in dsl_pool_sync()
695 if (!txg_list_empty(&dp->dp_early_sync_tasks, txg)) { in dsl_pool_sync()
698 ASSERT3U(spa_sync_pass(dp->dp_spa), ==, 1); in dsl_pool_sync()
700 txg_list_remove(&dp->dp_early_sync_tasks, txg)) != NULL) { in dsl_pool_sync()
701 ASSERT(dsl_early_sync_task_verify(dp, txg)); in dsl_pool_sync()
704 ASSERT(dsl_early_sync_task_verify(dp, txg)); in dsl_pool_sync()
711 rio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync()
712 while ((ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) != NULL) { in dsl_pool_sync()
728 mutex_enter(&dp->dp_lock); in dsl_pool_sync()
729 ASSERT(spa_sync_pass(dp->dp_spa) == 1 || in dsl_pool_sync()
730 dp->dp_long_free_dirty_pertxg[txg & TXG_MASK] == 0); in dsl_pool_sync()
731 dp->dp_long_free_dirty_pertxg[txg & TXG_MASK] = 0; in dsl_pool_sync()
732 mutex_exit(&dp->dp_lock); in dsl_pool_sync()
744 taskq_wait(dp->dp_sync_taskq); in dsl_pool_sync()
753 rio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); in dsl_pool_sync()
754 while ((ds = txg_list_remove(&dp->dp_dirty_datasets, txg)) != NULL) { in dsl_pool_sync()
769 key_mapping_rele(dp->dp_spa, ds->ds_key_mapping, ds); in dsl_pool_sync()
789 key_mapping_rele(dp->dp_spa, ds->ds_key_mapping, ds); in dsl_pool_sync()
796 while ((dd = txg_list_remove(&dp->dp_dirty_dirs, txg)) != NULL) { in dsl_pool_sync()
805 if (dp->dp_mos_used_delta != 0 || dp->dp_mos_compressed_delta != 0 || in dsl_pool_sync()
806 dp->dp_mos_uncompressed_delta != 0) { in dsl_pool_sync()
807 dsl_dir_diduse_space(dp->dp_mos_dir, DD_USED_HEAD, in dsl_pool_sync()
808 dp->dp_mos_used_delta, in dsl_pool_sync()
809 dp->dp_mos_compressed_delta, in dsl_pool_sync()
810 dp->dp_mos_uncompressed_delta, tx); in dsl_pool_sync()
811 dp->dp_mos_used_delta = 0; in dsl_pool_sync()
812 dp->dp_mos_compressed_delta = 0; in dsl_pool_sync()
813 dp->dp_mos_uncompressed_delta = 0; in dsl_pool_sync()
817 dsl_pool_sync_mos(dp, tx); in dsl_pool_sync()
833 dsl_pool_undirty_space(dp, dp->dp_dirty_pertxg[txg & TXG_MASK], txg); in dsl_pool_sync()
844 if (!txg_list_empty(&dp->dp_sync_tasks, txg)) { in dsl_pool_sync()
850 ASSERT3U(spa_sync_pass(dp->dp_spa), ==, 1); in dsl_pool_sync()
851 while ((dst = txg_list_remove(&dp->dp_sync_tasks, txg)) != NULL) in dsl_pool_sync()
857 DTRACE_PROBE2(dsl_pool_sync__done, dsl_pool_t *dp, dp, uint64_t, txg); in dsl_pool_sync()
861 dsl_pool_sync_done(dsl_pool_t *dp, uint64_t txg) in dsl_pool_sync_done() argument
865 while ((zilog = txg_list_head(&dp->dp_dirty_zilogs, txg))) { in dsl_pool_sync_done()
874 (void) txg_list_remove_this(&dp->dp_dirty_zilogs, zilog, txg); in dsl_pool_sync_done()
879 dsl_pool_wrlog_clear(dp, txg); in dsl_pool_sync_done()
881 ASSERT(!dmu_objset_is_dirty(dp->dp_meta_objset, txg)); in dsl_pool_sync_done()
889 dsl_pool_sync_context(dsl_pool_t *dp) in dsl_pool_sync_context() argument
891 return (curthread == dp->dp_tx.tx_sync_thread || in dsl_pool_sync_context()
892 spa_is_initializing(dp->dp_spa) || in dsl_pool_sync_context()
893 taskq_member(dp->dp_sync_taskq, curthread)); in dsl_pool_sync_context()
916 dsl_pool_adjustedsize(dsl_pool_t *dp, zfs_space_check_t slop_policy) in dsl_pool_adjustedsize() argument
918 spa_t *spa = dp->dp_spa; in dsl_pool_adjustedsize()
949 dsl_pool_unreserved_space(dsl_pool_t *dp, zfs_space_check_t slop_policy) in dsl_pool_unreserved_space() argument
951 uint64_t poolsize = dsl_pool_adjustedsize(dp, slop_policy); in dsl_pool_unreserved_space()
953 metaslab_class_get_deferred(spa_normal_class(dp->dp_spa)); in dsl_pool_unreserved_space()
959 dsl_pool_deferred_space(dsl_pool_t *dp) in dsl_pool_deferred_space() argument
961 return (metaslab_class_get_deferred(spa_normal_class(dp->dp_spa))); in dsl_pool_deferred_space()
965 dsl_pool_need_dirty_delay(dsl_pool_t *dp) in dsl_pool_need_dirty_delay() argument
976 return (dp->dp_dirty_total > delay_min_bytes); in dsl_pool_need_dirty_delay()
980 dsl_pool_need_dirty_sync(dsl_pool_t *dp, uint64_t txg) in dsl_pool_need_dirty_sync() argument
984 uint64_t dirty = dp->dp_dirty_pertxg[txg & TXG_MASK]; in dsl_pool_need_dirty_sync()
990 dsl_pool_dirty_space(dsl_pool_t *dp, int64_t space, dmu_tx_t *tx) in dsl_pool_dirty_space() argument
993 mutex_enter(&dp->dp_lock); in dsl_pool_dirty_space()
994 dp->dp_dirty_pertxg[tx->tx_txg & TXG_MASK] += space; in dsl_pool_dirty_space()
995 dsl_pool_dirty_delta(dp, space); in dsl_pool_dirty_space()
997 dsl_pool_need_dirty_sync(dp, tx->tx_txg); in dsl_pool_dirty_space()
998 mutex_exit(&dp->dp_lock); in dsl_pool_dirty_space()
1001 txg_kick(dp, tx->tx_txg); in dsl_pool_dirty_space()
1006 dsl_pool_undirty_space(dsl_pool_t *dp, int64_t space, uint64_t txg) in dsl_pool_undirty_space() argument
1012 mutex_enter(&dp->dp_lock); in dsl_pool_undirty_space()
1013 if (dp->dp_dirty_pertxg[txg & TXG_MASK] < space) { in dsl_pool_undirty_space()
1015 space = dp->dp_dirty_pertxg[txg & TXG_MASK]; in dsl_pool_undirty_space()
1017 ASSERT3U(dp->dp_dirty_pertxg[txg & TXG_MASK], >=, space); in dsl_pool_undirty_space()
1018 dp->dp_dirty_pertxg[txg & TXG_MASK] -= space; in dsl_pool_undirty_space()
1019 ASSERT3U(dp->dp_dirty_total, >=, space); in dsl_pool_undirty_space()
1020 dsl_pool_dirty_delta(dp, -space); in dsl_pool_undirty_space()
1021 mutex_exit(&dp->dp_lock); in dsl_pool_undirty_space()
1025 upgrade_clones_cb(dsl_pool_t *dp, dsl_dataset_t *hds, void *arg) in upgrade_clones_cb() argument
1031 err = dsl_dataset_hold_obj(dp, hds->ds_object, FTAG, &ds); in upgrade_clones_cb()
1036 err = dsl_dataset_hold_obj(dp, in upgrade_clones_cb()
1051 prev = dp->dp_origin_snap; in upgrade_clones_cb()
1080 VERIFY0(dsl_dataset_hold_obj(dp, in upgrade_clones_cb()
1092 zap_create(dp->dp_meta_objset, in upgrade_clones_cb()
1095 VERIFY0(zap_add_int(dp->dp_meta_objset, in upgrade_clones_cb()
1099 if (prev != dp->dp_origin_snap) in upgrade_clones_cb()
1105 dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_upgrade_clones() argument
1108 ASSERT(dp->dp_origin_snap != NULL); in dsl_pool_upgrade_clones()
1110 VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, upgrade_clones_cb, in dsl_pool_upgrade_clones()
1115 upgrade_dir_clones_cb(dsl_pool_t *dp, dsl_dataset_t *ds, void *arg) in upgrade_dir_clones_cb() argument
1118 objset_t *mos = dp->dp_meta_objset; in upgrade_dir_clones_cb()
1123 VERIFY0(dsl_dataset_hold_obj(dp, in upgrade_dir_clones_cb()
1133 VERIFY0(zap_add_int(dp->dp_meta_objset, in upgrade_dir_clones_cb()
1143 dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_upgrade_dir_clones() argument
1149 (void) dsl_dir_create_sync(dp, dp->dp_root_dir, FREE_DIR_NAME, tx); in dsl_pool_upgrade_dir_clones()
1150 VERIFY0(dsl_pool_open_special_dir(dp, in dsl_pool_upgrade_dir_clones()
1151 FREE_DIR_NAME, &dp->dp_free_dir)); in dsl_pool_upgrade_dir_clones()
1158 obj = dmu_object_alloc(dp->dp_meta_objset, DMU_OT_BPOBJ, in dsl_pool_upgrade_dir_clones()
1160 VERIFY0(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, in dsl_pool_upgrade_dir_clones()
1162 VERIFY0(bpobj_open(&dp->dp_free_bpobj, dp->dp_meta_objset, obj)); in dsl_pool_upgrade_dir_clones()
1164 VERIFY0(dmu_objset_find_dp(dp, dp->dp_root_dir_obj, in dsl_pool_upgrade_dir_clones()
1169 dsl_pool_create_origin(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_create_origin() argument
1175 ASSERT(dp->dp_origin_snap == NULL); in dsl_pool_create_origin()
1176 ASSERT(rrw_held(&dp->dp_config_rwlock, RW_WRITER)); in dsl_pool_create_origin()
1179 dsobj = dsl_dataset_create_sync(dp->dp_root_dir, ORIGIN_DIR_NAME, in dsl_pool_create_origin()
1181 VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); in dsl_pool_create_origin()
1183 VERIFY0(dsl_dataset_hold_obj(dp, dsl_dataset_phys(ds)->ds_prev_snap_obj, in dsl_pool_create_origin()
1184 dp, &dp->dp_origin_snap)); in dsl_pool_create_origin()
1189 dsl_pool_zrele_taskq(dsl_pool_t *dp) in dsl_pool_zrele_taskq() argument
1191 return (dp->dp_zrele_taskq); in dsl_pool_zrele_taskq()
1195 dsl_pool_unlinked_drain_taskq(dsl_pool_t *dp) in dsl_pool_unlinked_drain_taskq() argument
1197 return (dp->dp_unlinked_drain_taskq); in dsl_pool_unlinked_drain_taskq()
1205 dsl_pool_clean_tmp_userrefs(dsl_pool_t *dp) in dsl_pool_clean_tmp_userrefs() argument
1209 objset_t *mos = dp->dp_meta_objset; in dsl_pool_clean_tmp_userrefs()
1210 uint64_t zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_clean_tmp_userrefs()
1215 ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); in dsl_pool_clean_tmp_userrefs()
1238 dsl_dataset_user_release_tmp(dp, holds); in dsl_pool_clean_tmp_userrefs()
1248 dsl_pool_user_hold_create_obj(dsl_pool_t *dp, dmu_tx_t *tx) in dsl_pool_user_hold_create_obj() argument
1250 objset_t *mos = dp->dp_meta_objset; in dsl_pool_user_hold_create_obj()
1252 ASSERT(dp->dp_tmp_userrefs_obj == 0); in dsl_pool_user_hold_create_obj()
1255 dp->dp_tmp_userrefs_obj = zap_create_link(mos, DMU_OT_USERREFS, in dsl_pool_user_hold_create_obj()
1260 dsl_pool_user_hold_rele_impl(dsl_pool_t *dp, uint64_t dsobj, in dsl_pool_user_hold_rele_impl() argument
1263 objset_t *mos = dp->dp_meta_objset; in dsl_pool_user_hold_rele_impl()
1264 uint64_t zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_user_hold_rele_impl()
1268 ASSERT(spa_version(dp->dp_spa) >= SPA_VERSION_USERREFS); in dsl_pool_user_hold_rele_impl()
1277 dsl_pool_user_hold_create_obj(dp, tx); in dsl_pool_user_hold_rele_impl()
1278 zapobj = dp->dp_tmp_userrefs_obj; in dsl_pool_user_hold_rele_impl()
1298 dsl_pool_user_hold(dsl_pool_t *dp, uint64_t dsobj, const char *tag, in dsl_pool_user_hold() argument
1301 return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, now, tx, B_TRUE)); in dsl_pool_user_hold()
1308 dsl_pool_user_release(dsl_pool_t *dp, uint64_t dsobj, const char *tag, in dsl_pool_user_release() argument
1311 return (dsl_pool_user_hold_rele_impl(dp, dsobj, tag, 0, in dsl_pool_user_release()
1394 dsl_pool_hold(const char *name, const void *tag, dsl_pool_t **dp) in dsl_pool_hold() argument
1401 *dp = spa_get_dsl(spa); in dsl_pool_hold()
1402 dsl_pool_config_enter(*dp, tag); in dsl_pool_hold()
1408 dsl_pool_rele(dsl_pool_t *dp, const void *tag) in dsl_pool_rele() argument
1410 dsl_pool_config_exit(dp, tag); in dsl_pool_rele()
1411 spa_close(dp->dp_spa, tag); in dsl_pool_rele()
1415 dsl_pool_config_enter(dsl_pool_t *dp, const void *tag) in dsl_pool_config_enter() argument
1429 ASSERT(!rrw_held(&dp->dp_config_rwlock, RW_READER)); in dsl_pool_config_enter()
1430 rrw_enter(&dp->dp_config_rwlock, RW_READER, tag); in dsl_pool_config_enter()
1434 dsl_pool_config_enter_prio(dsl_pool_t *dp, const void *tag) in dsl_pool_config_enter_prio() argument
1436 ASSERT(!rrw_held(&dp->dp_config_rwlock, RW_READER)); in dsl_pool_config_enter_prio()
1437 rrw_enter_read_prio(&dp->dp_config_rwlock, tag); in dsl_pool_config_enter_prio()
1441 dsl_pool_config_exit(dsl_pool_t *dp, const void *tag) in dsl_pool_config_exit() argument
1443 rrw_exit(&dp->dp_config_rwlock, tag); in dsl_pool_config_exit()
1447 dsl_pool_config_held(dsl_pool_t *dp) in dsl_pool_config_held() argument
1449 return (RRW_LOCK_HELD(&dp->dp_config_rwlock)); in dsl_pool_config_held()
1453 dsl_pool_config_held_writer(dsl_pool_t *dp) in dsl_pool_config_held_writer() argument
1455 return (RRW_WRITE_HELD(&dp->dp_config_rwlock)); in dsl_pool_config_held_writer()