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