Lines Matching refs:spa

380 spa_load_failed(spa_t *spa, const char *fmt, ...)  in spa_load_failed()  argument
389 zfs_dbgmsg("spa_load(%s, config %s): FAILED: %s", spa->spa_name, in spa_load_failed()
390 spa->spa_trust_config ? "trusted" : "untrusted", buf); in spa_load_failed()
395 spa_load_note(spa_t *spa, const char *fmt, ...) in spa_load_note() argument
404 zfs_dbgmsg("spa_load(%s, config %s): %s", spa->spa_name, in spa_load_note()
405 spa->spa_trust_config ? "trusted" : "untrusted", buf); in spa_load_note()
427 spa_config_lock_init(spa_t *spa) in spa_config_lock_init() argument
430 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_lock_init()
440 spa_config_lock_destroy(spa_t *spa) in spa_config_lock_destroy() argument
443 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_lock_destroy()
453 spa_config_tryenter(spa_t *spa, int locks, void *tag, krw_t rw) in spa_config_tryenter() argument
456 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_tryenter()
463 spa_config_exit(spa, locks & ((1 << i) - 1), in spa_config_tryenter()
471 spa_config_exit(spa, locks & ((1 << i) - 1), in spa_config_tryenter()
484 spa_config_enter(spa_t *spa, int locks, void *tag, krw_t rw) in spa_config_enter() argument
491 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_enter()
517 spa_config_exit(spa_t *spa, int locks, void *tag) in spa_config_exit() argument
520 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_exit()
536 spa_config_held(spa_t *spa, int locks, krw_t rw) in spa_config_held() argument
541 spa_config_lock_t *scl = &spa->spa_config_lock[i]; in spa_config_held()
567 spa_t *spa; in spa_lookup() local
583 spa = avl_find(&spa_namespace_avl, &search, &where); in spa_lookup()
585 return (spa); in spa_lookup()
596 spa_t *spa = arg; in spa_deadman() local
601 if (spa_suspended(spa)) { in spa_deadman()
602 VERIFY(cyclic_reprogram(spa->spa_deadman_cycid, CY_INFINITY)); in spa_deadman()
607 (gethrtime() - spa->spa_sync_starttime) / NANOSEC, in spa_deadman()
608 ++spa->spa_deadman_calls); in spa_deadman()
610 vdev_deadman(spa->spa_root_vdev); in spa_deadman()
630 spa_t *spa; in spa_add() local
637 spa = kmem_zalloc(sizeof (spa_t), KM_SLEEP); in spa_add()
639 mutex_init(&spa->spa_async_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
640 mutex_init(&spa->spa_errlist_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
641 mutex_init(&spa->spa_errlog_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
642 mutex_init(&spa->spa_evicting_os_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
643 mutex_init(&spa->spa_history_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
644 mutex_init(&spa->spa_proc_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
645 mutex_init(&spa->spa_props_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
646 mutex_init(&spa->spa_cksum_tmpls_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
647 mutex_init(&spa->spa_scrub_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
648 mutex_init(&spa->spa_suspend_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
649 mutex_init(&spa->spa_vdev_top_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
650 mutex_init(&spa->spa_iokstat_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
651 mutex_init(&spa->spa_flushed_ms_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
652 mutex_init(&spa->spa_imp_kstat_lock, NULL, MUTEX_DEFAULT, NULL); in spa_add()
654 cv_init(&spa->spa_async_cv, NULL, CV_DEFAULT, NULL); in spa_add()
655 cv_init(&spa->spa_evicting_os_cv, NULL, CV_DEFAULT, NULL); in spa_add()
656 cv_init(&spa->spa_proc_cv, NULL, CV_DEFAULT, NULL); in spa_add()
657 cv_init(&spa->spa_scrub_io_cv, NULL, CV_DEFAULT, NULL); in spa_add()
658 cv_init(&spa->spa_suspend_cv, NULL, CV_DEFAULT, NULL); in spa_add()
661 bplist_create(&spa->spa_free_bplist[t]); in spa_add()
663 (void) strlcpy(spa->spa_name, name, sizeof (spa->spa_name)); in spa_add()
664 spa->spa_state = POOL_STATE_UNINITIALIZED; in spa_add()
665 spa->spa_freeze_txg = UINT64_MAX; in spa_add()
666 spa->spa_final_txg = UINT64_MAX; in spa_add()
667 spa->spa_load_max_txg = UINT64_MAX; in spa_add()
668 spa->spa_proc = &p0; in spa_add()
669 spa->spa_proc_state = SPA_PROC_NONE; in spa_add()
670 spa->spa_trust_config = B_TRUE; in spa_add()
673 hdlr.cyh_arg = spa; in spa_add()
676 spa->spa_deadman_synctime = MSEC2NSEC(zfs_deadman_synctime_ms); in spa_add()
687 spa->spa_deadman_cycid = cyclic_add(&hdlr, &when); in spa_add()
690 zfs_refcount_create(&spa->spa_refcount); in spa_add()
691 spa_config_lock_init(spa); in spa_add()
693 avl_add(&spa_namespace_avl, spa); in spa_add()
699 spa->spa_root = spa_strdup(altroot); in spa_add()
703 spa->spa_alloc_count = spa_allocators; in spa_add()
704 spa->spa_alloc_locks = kmem_zalloc(spa->spa_alloc_count * in spa_add()
706 spa->spa_alloc_trees = kmem_zalloc(spa->spa_alloc_count * in spa_add()
708 for (int i = 0; i < spa->spa_alloc_count; i++) { in spa_add()
709 mutex_init(&spa->spa_alloc_locks[i], NULL, MUTEX_DEFAULT, NULL); in spa_add()
710 avl_create(&spa->spa_alloc_trees[i], zio_bookmark_compare, in spa_add()
713 avl_create(&spa->spa_metaslabs_by_flushed, metaslab_sort_by_flushed, in spa_add()
715 avl_create(&spa->spa_sm_logs_by_txg, spa_log_sm_sort_by_txg, in spa_add()
717 list_create(&spa->spa_log_summary, sizeof (log_summary_entry_t), in spa_add()
723 list_create(&spa->spa_config_list, sizeof (spa_config_dirent_t), in spa_add()
728 list_insert_head(&spa->spa_config_list, dp); in spa_add()
730 VERIFY(nvlist_alloc(&spa->spa_load_info, NV_UNIQUE_NAME, in spa_add()
738 VERIFY(nvlist_dup(features, &spa->spa_label_features, in spa_add()
742 VERIFY(nvlist_dup(config, &spa->spa_config, 0) == 0); in spa_add()
745 if (spa->spa_label_features == NULL) { in spa_add()
746 VERIFY(nvlist_alloc(&spa->spa_label_features, NV_UNIQUE_NAME, in spa_add()
750 spa->spa_iokstat = kstat_create("zfs", 0, name, in spa_add()
752 if (spa->spa_iokstat) { in spa_add()
753 spa->spa_iokstat->ks_lock = &spa->spa_iokstat_lock; in spa_add()
754 kstat_install(spa->spa_iokstat); in spa_add()
757 spa->spa_min_ashift = INT_MAX; in spa_add()
758 spa->spa_max_ashift = 0; in spa_add()
766 spa->spa_feat_refcount_cache[i] = SPA_FEATURE_DISABLED; in spa_add()
769 list_create(&spa->spa_leaf_list, sizeof (vdev_t), in spa_add()
772 return (spa); in spa_add()
781 spa_remove(spa_t *spa) in spa_remove() argument
786 ASSERT(spa_state(spa) == POOL_STATE_UNINITIALIZED); in spa_remove()
787 ASSERT3U(zfs_refcount_count(&spa->spa_refcount), ==, 0); in spa_remove()
789 nvlist_free(spa->spa_config_splitting); in spa_remove()
791 avl_remove(&spa_namespace_avl, spa); in spa_remove()
794 if (spa->spa_root) { in spa_remove()
795 spa_strfree(spa->spa_root); in spa_remove()
799 while ((dp = list_head(&spa->spa_config_list)) != NULL) { in spa_remove()
800 list_remove(&spa->spa_config_list, dp); in spa_remove()
806 for (int i = 0; i < spa->spa_alloc_count; i++) { in spa_remove()
807 avl_destroy(&spa->spa_alloc_trees[i]); in spa_remove()
808 mutex_destroy(&spa->spa_alloc_locks[i]); in spa_remove()
810 kmem_free(spa->spa_alloc_locks, spa->spa_alloc_count * in spa_remove()
812 kmem_free(spa->spa_alloc_trees, spa->spa_alloc_count * in spa_remove()
815 avl_destroy(&spa->spa_metaslabs_by_flushed); in spa_remove()
816 avl_destroy(&spa->spa_sm_logs_by_txg); in spa_remove()
817 list_destroy(&spa->spa_log_summary); in spa_remove()
818 list_destroy(&spa->spa_config_list); in spa_remove()
819 list_destroy(&spa->spa_leaf_list); in spa_remove()
821 nvlist_free(spa->spa_label_features); in spa_remove()
822 nvlist_free(spa->spa_load_info); in spa_remove()
823 spa_config_set(spa, NULL); in spa_remove()
826 if (spa->spa_deadman_cycid != CYCLIC_NONE) in spa_remove()
827 cyclic_remove(spa->spa_deadman_cycid); in spa_remove()
829 spa->spa_deadman_cycid = CYCLIC_NONE; in spa_remove()
831 zfs_refcount_destroy(&spa->spa_refcount); in spa_remove()
833 spa_config_lock_destroy(spa); in spa_remove()
835 kstat_delete(spa->spa_iokstat); in spa_remove()
836 spa->spa_iokstat = NULL; in spa_remove()
839 bplist_destroy(&spa->spa_free_bplist[t]); in spa_remove()
841 zio_checksum_templates_free(spa); in spa_remove()
843 cv_destroy(&spa->spa_async_cv); in spa_remove()
844 cv_destroy(&spa->spa_evicting_os_cv); in spa_remove()
845 cv_destroy(&spa->spa_proc_cv); in spa_remove()
846 cv_destroy(&spa->spa_scrub_io_cv); in spa_remove()
847 cv_destroy(&spa->spa_suspend_cv); in spa_remove()
849 mutex_destroy(&spa->spa_flushed_ms_lock); in spa_remove()
850 mutex_destroy(&spa->spa_async_lock); in spa_remove()
851 mutex_destroy(&spa->spa_errlist_lock); in spa_remove()
852 mutex_destroy(&spa->spa_errlog_lock); in spa_remove()
853 mutex_destroy(&spa->spa_evicting_os_lock); in spa_remove()
854 mutex_destroy(&spa->spa_history_lock); in spa_remove()
855 mutex_destroy(&spa->spa_proc_lock); in spa_remove()
856 mutex_destroy(&spa->spa_props_lock); in spa_remove()
857 mutex_destroy(&spa->spa_cksum_tmpls_lock); in spa_remove()
858 mutex_destroy(&spa->spa_scrub_lock); in spa_remove()
859 mutex_destroy(&spa->spa_suspend_lock); in spa_remove()
860 mutex_destroy(&spa->spa_vdev_top_lock); in spa_remove()
861 mutex_destroy(&spa->spa_iokstat_lock); in spa_remove()
862 mutex_destroy(&spa->spa_imp_kstat_lock); in spa_remove()
864 kmem_free(spa, sizeof (spa_t)); in spa_remove()
893 spa_open_ref(spa_t *spa, void *tag) in spa_open_ref() argument
895 ASSERT(zfs_refcount_count(&spa->spa_refcount) >= spa->spa_minref || in spa_open_ref()
897 (void) zfs_refcount_add(&spa->spa_refcount, tag); in spa_open_ref()
905 spa_close(spa_t *spa, void *tag) in spa_close() argument
907 ASSERT(zfs_refcount_count(&spa->spa_refcount) > spa->spa_minref || in spa_close()
909 (void) zfs_refcount_remove(&spa->spa_refcount, tag); in spa_close()
921 spa_async_close(spa_t *spa, void *tag) in spa_async_close() argument
923 (void) zfs_refcount_remove(&spa->spa_refcount, tag); in spa_async_close()
932 spa_refcount_zero(spa_t *spa) in spa_refcount_zero() argument
936 return (zfs_refcount_count(&spa->spa_refcount) == spa->spa_minref); in spa_refcount_zero()
1072 spa_spare_poll(spa_t *spa) in spa_spare_poll() argument
1075 spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); in spa_spare_poll()
1076 for (int i = 0; i < spa->spa_spares.sav_count; i++) { in spa_spare_poll()
1078 vdev_t *vd = spa->spa_spares.sav_vdevs[i]; in spa_spare_poll()
1095 spa_async_request(spa, SPA_ASYNC_PROBE); in spa_spare_poll()
1097 spa_config_exit(spa, SCL_STATE, FTAG); in spa_spare_poll()
1212 spa_vdev_enter(spa_t *spa) in spa_vdev_enter() argument
1214 mutex_enter(&spa->spa_vdev_top_lock); in spa_vdev_enter()
1217 vdev_autotrim_stop_all(spa); in spa_vdev_enter()
1219 return (spa_vdev_config_enter(spa)); in spa_vdev_enter()
1228 spa_vdev_config_enter(spa_t *spa) in spa_vdev_config_enter() argument
1232 spa_config_enter(spa, SCL_ALL, spa, RW_WRITER); in spa_vdev_config_enter()
1234 return (spa_last_synced_txg(spa) + 1); in spa_vdev_config_enter()
1242 spa_vdev_config_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error, char *tag) in spa_vdev_config_exit() argument
1248 ASSERT(txg > spa_last_synced_txg(spa)); in spa_vdev_config_exit()
1250 spa->spa_pending_vdev = NULL; in spa_vdev_config_exit()
1255 vdev_dtl_reassess(spa->spa_root_vdev, 0, 0, B_FALSE); in spa_vdev_config_exit()
1257 if (error == 0 && !list_is_empty(&spa->spa_config_dirty_list)) { in spa_vdev_config_exit()
1259 spa->spa_config_generation++; in spa_vdev_config_exit()
1265 ASSERT(metaslab_class_validate(spa_normal_class(spa)) == 0); in spa_vdev_config_exit()
1266 ASSERT(metaslab_class_validate(spa_log_class(spa)) == 0); in spa_vdev_config_exit()
1267 ASSERT(metaslab_class_validate(spa_special_class(spa)) == 0); in spa_vdev_config_exit()
1268 ASSERT(metaslab_class_validate(spa_dedup_class(spa)) == 0); in spa_vdev_config_exit()
1270 spa_config_exit(spa, SCL_ALL, spa); in spa_vdev_config_exit()
1278 zio_handle_panic_injection(spa, tag, 0); in spa_vdev_config_exit()
1286 txg_wait_synced(spa->spa_dsl_pool, txg); in spa_vdev_config_exit()
1306 spa_config_enter(spa, SCL_ALL, spa, RW_WRITER); in spa_vdev_config_exit()
1308 spa_config_exit(spa, SCL_ALL, spa); in spa_vdev_config_exit()
1315 spa_write_cachefile(spa, B_FALSE, B_TRUE); in spa_vdev_config_exit()
1325 spa_vdev_exit(spa_t *spa, vdev_t *vd, uint64_t txg, int error) in spa_vdev_exit() argument
1327 vdev_autotrim_restart(spa); in spa_vdev_exit()
1329 spa_vdev_config_exit(spa, vd, txg, error, FTAG); in spa_vdev_exit()
1331 mutex_exit(&spa->spa_vdev_top_lock); in spa_vdev_exit()
1340 spa_vdev_state_enter(spa_t *spa, int oplocks) in spa_vdev_state_enter() argument
1353 if (spa_is_root(spa)) { in spa_vdev_state_enter()
1357 spa_config_enter(spa, high, spa, RW_WRITER); in spa_vdev_state_enter()
1358 vdev_hold(spa->spa_root_vdev); in spa_vdev_state_enter()
1359 spa_config_enter(spa, low, spa, RW_WRITER); in spa_vdev_state_enter()
1361 spa_config_enter(spa, locks, spa, RW_WRITER); in spa_vdev_state_enter()
1363 spa->spa_vdev_locks = locks; in spa_vdev_state_enter()
1367 spa_vdev_state_exit(spa_t *spa, vdev_t *vd, int error) in spa_vdev_state_exit() argument
1372 vdev_dtl_reassess(vd ? vd->vdev_top : spa->spa_root_vdev, in spa_vdev_state_exit()
1378 spa->spa_config_generation++; in spa_vdev_state_exit()
1381 if (spa_is_root(spa)) in spa_vdev_state_exit()
1382 vdev_rele(spa->spa_root_vdev); in spa_vdev_state_exit()
1384 ASSERT3U(spa->spa_vdev_locks, >=, SCL_STATE_ALL); in spa_vdev_state_exit()
1385 spa_config_exit(spa, spa->spa_vdev_locks, spa); in spa_vdev_state_exit()
1394 txg_wait_synced(spa->spa_dsl_pool, 0); in spa_vdev_state_exit()
1401 spa_write_cachefile(spa, B_FALSE, B_TRUE); in spa_vdev_state_exit()
1415 spa_activate_mos_feature(spa_t *spa, const char *feature, dmu_tx_t *tx) in spa_activate_mos_feature() argument
1417 if (!nvlist_exists(spa->spa_label_features, feature)) { in spa_activate_mos_feature()
1418 fnvlist_add_boolean(spa->spa_label_features, feature); in spa_activate_mos_feature()
1427 vdev_config_dirty(spa->spa_root_vdev); in spa_activate_mos_feature()
1432 spa_deactivate_mos_feature(spa_t *spa, const char *feature) in spa_deactivate_mos_feature() argument
1434 if (nvlist_remove_all(spa->spa_label_features, feature) == 0) in spa_deactivate_mos_feature()
1435 vdev_config_dirty(spa->spa_root_vdev); in spa_deactivate_mos_feature()
1446 spa_t *spa; in spa_by_guid() local
1451 for (spa = avl_first(t); spa != NULL; spa = AVL_NEXT(t, spa)) { in spa_by_guid()
1452 if (spa->spa_state == POOL_STATE_UNINITIALIZED) in spa_by_guid()
1454 if (spa->spa_root_vdev == NULL) in spa_by_guid()
1456 if (spa_guid(spa) == pool_guid) { in spa_by_guid()
1460 if (vdev_lookup_by_guid(spa->spa_root_vdev, in spa_by_guid()
1467 if (spa->spa_pending_vdev) { in spa_by_guid()
1468 if (vdev_lookup_by_guid(spa->spa_pending_vdev, in spa_by_guid()
1475 return (spa); in spa_by_guid()
1523 spa_generate_guid(spa_t *spa) in spa_generate_guid() argument
1527 if (spa != NULL) { in spa_generate_guid()
1528 while (guid == 0 || spa_guid_exists(spa_guid(spa), guid)) in spa_generate_guid()
1569 spa_freeze(spa_t *spa) in spa_freeze() argument
1573 spa_config_enter(spa, SCL_ALL, FTAG, RW_WRITER); in spa_freeze()
1574 if (spa->spa_freeze_txg == UINT64_MAX) { in spa_freeze()
1575 freeze_txg = spa_last_synced_txg(spa) + TXG_SIZE; in spa_freeze()
1576 spa->spa_freeze_txg = freeze_txg; in spa_freeze()
1578 spa_config_exit(spa, SCL_ALL, FTAG); in spa_freeze()
1580 txg_wait_synced(spa_get_dsl(spa), freeze_txg); in spa_freeze()
1625 spa_activate_allocation_classes(spa_t *spa, dmu_tx_t *tx) in spa_activate_allocation_classes() argument
1630 ASSERT(spa_feature_is_enabled(spa, SPA_FEATURE_ALLOCATION_CLASSES)); in spa_activate_allocation_classes()
1631 spa_feature_incr(spa, SPA_FEATURE_ALLOCATION_CLASSES, tx); in spa_activate_allocation_classes()
1641 spa_shutting_down(spa_t *spa) in spa_shutting_down() argument
1643 return (spa->spa_async_suspended); in spa_shutting_down()
1647 spa_get_dsl(spa_t *spa) in spa_get_dsl() argument
1649 return (spa->spa_dsl_pool); in spa_get_dsl()
1653 spa_is_initializing(spa_t *spa) in spa_is_initializing() argument
1655 return (spa->spa_is_initializing); in spa_is_initializing()
1659 spa_indirect_vdevs_loaded(spa_t *spa) in spa_indirect_vdevs_loaded() argument
1661 return (spa->spa_indirect_vdevs_loaded); in spa_indirect_vdevs_loaded()
1665 spa_get_rootblkptr(spa_t *spa) in spa_get_rootblkptr() argument
1667 return (&spa->spa_ubsync.ub_rootbp); in spa_get_rootblkptr()
1671 spa_set_rootblkptr(spa_t *spa, const blkptr_t *bp) in spa_set_rootblkptr() argument
1673 spa->spa_uberblock.ub_rootbp = *bp; in spa_set_rootblkptr()
1677 spa_altroot(spa_t *spa, char *buf, size_t buflen) in spa_altroot() argument
1679 if (spa->spa_root == NULL) in spa_altroot()
1682 (void) strncpy(buf, spa->spa_root, buflen); in spa_altroot()
1686 spa_sync_pass(spa_t *spa) in spa_sync_pass() argument
1688 return (spa->spa_sync_pass); in spa_sync_pass()
1692 spa_name(spa_t *spa) in spa_name() argument
1694 return (spa->spa_name); in spa_name()
1698 spa_guid(spa_t *spa) in spa_guid() argument
1700 dsl_pool_t *dp = spa_get_dsl(spa); in spa_guid()
1709 if (spa->spa_root_vdev == NULL) in spa_guid()
1710 return (spa->spa_config_guid); in spa_guid()
1712 guid = spa->spa_last_synced_guid != 0 ? in spa_guid()
1713 spa->spa_last_synced_guid : spa->spa_root_vdev->vdev_guid; in spa_guid()
1720 return (spa->spa_root_vdev->vdev_guid); in spa_guid()
1726 spa_load_guid(spa_t *spa) in spa_load_guid() argument
1733 return (spa->spa_load_guid); in spa_load_guid()
1737 spa_last_synced_txg(spa_t *spa) in spa_last_synced_txg() argument
1739 return (spa->spa_ubsync.ub_txg); in spa_last_synced_txg()
1743 spa_first_txg(spa_t *spa) in spa_first_txg() argument
1745 return (spa->spa_first_txg); in spa_first_txg()
1749 spa_syncing_txg(spa_t *spa) in spa_syncing_txg() argument
1751 return (spa->spa_syncing_txg); in spa_syncing_txg()
1759 spa_final_dirty_txg(spa_t *spa) in spa_final_dirty_txg() argument
1761 return (spa->spa_final_txg - TXG_DEFER_SIZE); in spa_final_dirty_txg()
1765 spa_state(spa_t *spa) in spa_state() argument
1767 return (spa->spa_state); in spa_state()
1771 spa_load_state(spa_t *spa) in spa_load_state() argument
1773 return (spa->spa_load_state); in spa_load_state()
1777 spa_freeze_txg(spa_t *spa) in spa_freeze_txg() argument
1779 return (spa->spa_freeze_txg); in spa_freeze_txg()
1784 spa_get_worst_case_asize(spa_t *spa, uint64_t lsize) in spa_get_worst_case_asize() argument
1797 spa_get_slop_space(spa_t *spa) in spa_get_slop_space() argument
1799 uint64_t space = spa_get_dspace(spa); in spa_get_slop_space()
1804 spa_get_dspace(spa_t *spa) in spa_get_dspace() argument
1806 return (spa->spa_dspace); in spa_get_dspace()
1810 spa_get_checkpoint_space(spa_t *spa) in spa_get_checkpoint_space() argument
1812 return (spa->spa_checkpoint_info.sci_dspace); in spa_get_checkpoint_space()
1816 spa_update_dspace(spa_t *spa) in spa_update_dspace() argument
1818 spa->spa_dspace = metaslab_class_get_dspace(spa_normal_class(spa)) + in spa_update_dspace()
1819 ddt_get_dedup_dspace(spa); in spa_update_dspace()
1820 if (spa->spa_vdev_removal != NULL) { in spa_update_dspace()
1834 spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); in spa_update_dspace()
1836 vdev_lookup_top(spa, spa->spa_vdev_removal->svr_vdev_id); in spa_update_dspace()
1837 spa->spa_dspace -= spa_deflate(spa) ? in spa_update_dspace()
1839 spa_config_exit(spa, SCL_VDEV, FTAG); in spa_update_dspace()
1848 spa_get_failmode(spa_t *spa) in spa_get_failmode() argument
1850 return (spa->spa_failmode); in spa_get_failmode()
1854 spa_suspended(spa_t *spa) in spa_suspended() argument
1856 return (spa->spa_suspended != ZIO_SUSPEND_NONE); in spa_suspended()
1860 spa_version(spa_t *spa) in spa_version() argument
1862 return (spa->spa_ubsync.ub_version); in spa_version()
1866 spa_deflate(spa_t *spa) in spa_deflate() argument
1868 return (spa->spa_deflate); in spa_deflate()
1872 spa_normal_class(spa_t *spa) in spa_normal_class() argument
1874 return (spa->spa_normal_class); in spa_normal_class()
1878 spa_log_class(spa_t *spa) in spa_log_class() argument
1880 return (spa->spa_log_class); in spa_log_class()
1884 spa_special_class(spa_t *spa) in spa_special_class() argument
1886 return (spa->spa_special_class); in spa_special_class()
1890 spa_dedup_class(spa_t *spa) in spa_dedup_class() argument
1892 return (spa->spa_dedup_class); in spa_dedup_class()
1899 spa_preferred_class(spa_t *spa, uint64_t size, dmu_object_type_t objtype, in spa_preferred_class() argument
1903 if (spa->spa_log_class->mc_groups != 0) in spa_preferred_class()
1904 return (spa_log_class(spa)); in spa_preferred_class()
1906 return (spa_normal_class(spa)); in spa_preferred_class()
1909 boolean_t has_special_class = spa->spa_special_class->mc_groups != 0; in spa_preferred_class()
1912 if (spa->spa_dedup_class->mc_groups != 0) in spa_preferred_class()
1913 return (spa_dedup_class(spa)); in spa_preferred_class()
1915 return (spa_special_class(spa)); in spa_preferred_class()
1917 return (spa_normal_class(spa)); in spa_preferred_class()
1923 return (spa_special_class(spa)); in spa_preferred_class()
1925 return (spa_normal_class(spa)); in spa_preferred_class()
1930 return (spa_special_class(spa)); in spa_preferred_class()
1932 return (spa_normal_class(spa)); in spa_preferred_class()
1942 metaslab_class_t *special = spa_special_class(spa); in spa_preferred_class()
1953 return (spa_normal_class(spa)); in spa_preferred_class()
1957 spa_evicting_os_register(spa_t *spa, objset_t *os) in spa_evicting_os_register() argument
1959 mutex_enter(&spa->spa_evicting_os_lock); in spa_evicting_os_register()
1960 list_insert_head(&spa->spa_evicting_os_list, os); in spa_evicting_os_register()
1961 mutex_exit(&spa->spa_evicting_os_lock); in spa_evicting_os_register()
1965 spa_evicting_os_deregister(spa_t *spa, objset_t *os) in spa_evicting_os_deregister() argument
1967 mutex_enter(&spa->spa_evicting_os_lock); in spa_evicting_os_deregister()
1968 list_remove(&spa->spa_evicting_os_list, os); in spa_evicting_os_deregister()
1969 cv_broadcast(&spa->spa_evicting_os_cv); in spa_evicting_os_deregister()
1970 mutex_exit(&spa->spa_evicting_os_lock); in spa_evicting_os_deregister()
1974 spa_evicting_os_wait(spa_t *spa) in spa_evicting_os_wait() argument
1976 mutex_enter(&spa->spa_evicting_os_lock); in spa_evicting_os_wait()
1977 while (!list_is_empty(&spa->spa_evicting_os_list)) in spa_evicting_os_wait()
1978 cv_wait(&spa->spa_evicting_os_cv, &spa->spa_evicting_os_lock); in spa_evicting_os_wait()
1979 mutex_exit(&spa->spa_evicting_os_lock); in spa_evicting_os_wait()
1985 spa_max_replication(spa_t *spa) in spa_max_replication() argument
1992 if (spa_version(spa) < SPA_VERSION_DITTO_BLOCKS) in spa_max_replication()
1998 spa_prev_software_version(spa_t *spa) in spa_prev_software_version() argument
2000 return (spa->spa_prev_software_version); in spa_prev_software_version()
2004 spa_deadman_synctime(spa_t *spa) in spa_deadman_synctime() argument
2006 return (spa->spa_deadman_synctime); in spa_deadman_synctime()
2010 spa_get_autotrim(spa_t *spa) in spa_get_autotrim() argument
2012 return (spa->spa_autotrim); in spa_get_autotrim()
2016 dva_get_dsize_sync(spa_t *spa, const dva_t *dva) in dva_get_dsize_sync() argument
2021 ASSERT(spa_config_held(spa, SCL_ALL, RW_READER) != 0); in dva_get_dsize_sync()
2023 if (asize != 0 && spa->spa_deflate) { in dva_get_dsize_sync()
2024 vdev_t *vd = vdev_lookup_top(spa, DVA_GET_VDEV(dva)); in dva_get_dsize_sync()
2032 bp_get_dsize_sync(spa_t *spa, const blkptr_t *bp) in bp_get_dsize_sync() argument
2037 dsize += dva_get_dsize_sync(spa, &bp->blk_dva[d]); in bp_get_dsize_sync()
2043 bp_get_dsize(spa_t *spa, const blkptr_t *bp) in bp_get_dsize() argument
2047 spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); in bp_get_dsize()
2050 dsize += dva_get_dsize_sync(spa, &bp->blk_dva[d]); in bp_get_dsize()
2052 spa_config_exit(spa, SCL_VDEV, FTAG); in bp_get_dsize()
2058 spa_dirty_data(spa_t *spa) in spa_dirty_data() argument
2060 return (spa->spa_dsl_pool->dp_dirty_total); in spa_dirty_data()
2090 spa_import_progress_set_state(spa_t *spa, spa_load_state_t load_state) in spa_import_progress_set_state() argument
2092 if (spa->spa_imp_kstat == NULL) in spa_import_progress_set_state()
2093 spa_import_progress_add(spa); in spa_import_progress_set_state()
2095 mutex_enter(&spa->spa_imp_kstat_lock); in spa_import_progress_set_state()
2096 if (spa->spa_imp_kstat != NULL) { in spa_import_progress_set_state()
2097 spa_import_progress_t *sip = spa->spa_imp_kstat->ks_data; in spa_import_progress_set_state()
2101 mutex_exit(&spa->spa_imp_kstat_lock); in spa_import_progress_set_state()
2107 spa_import_progress_set_max_txg(spa_t *spa, uint64_t load_max_txg) in spa_import_progress_set_max_txg() argument
2109 if (spa->spa_imp_kstat == NULL) in spa_import_progress_set_max_txg()
2110 spa_import_progress_add(spa); in spa_import_progress_set_max_txg()
2112 mutex_enter(&spa->spa_imp_kstat_lock); in spa_import_progress_set_max_txg()
2113 if (spa->spa_imp_kstat != NULL) { in spa_import_progress_set_max_txg()
2114 spa_import_progress_t *sip = spa->spa_imp_kstat->ks_data; in spa_import_progress_set_max_txg()
2118 mutex_exit(&spa->spa_imp_kstat_lock); in spa_import_progress_set_max_txg()
2124 spa_import_progress_set_mmp_check(spa_t *spa, uint64_t mmp_sec_remaining) in spa_import_progress_set_mmp_check() argument
2126 if (spa->spa_imp_kstat == NULL) in spa_import_progress_set_mmp_check()
2127 spa_import_progress_add(spa); in spa_import_progress_set_mmp_check()
2129 mutex_enter(&spa->spa_imp_kstat_lock); in spa_import_progress_set_mmp_check()
2130 if (spa->spa_imp_kstat != NULL) { in spa_import_progress_set_mmp_check()
2131 spa_import_progress_t *sip = spa->spa_imp_kstat->ks_data; in spa_import_progress_set_mmp_check()
2136 mutex_exit(&spa->spa_imp_kstat_lock); in spa_import_progress_set_mmp_check()
2145 spa_import_progress_add(spa_t *spa) in spa_import_progress_add() argument
2150 mutex_enter(&spa->spa_imp_kstat_lock); in spa_import_progress_add()
2151 if (spa->spa_imp_kstat != NULL) { in spa_import_progress_add()
2152 sip = spa->spa_imp_kstat->ks_data; in spa_import_progress_add()
2153 sip->sip_load_state.value.ui64 = (uint64_t)spa_load_state(spa); in spa_import_progress_add()
2154 mutex_exit(&spa->spa_imp_kstat_lock); in spa_import_progress_add()
2158 (void) nvlist_lookup_string(spa->spa_config, ZPOOL_CONFIG_POOL_NAME, in spa_import_progress_add()
2161 poolname = spa_name(spa); in spa_import_progress_add()
2163 spa->spa_imp_kstat = kstat_create("zfs_import", 0, poolname, in spa_import_progress_add()
2167 if (spa->spa_imp_kstat != NULL) { in spa_import_progress_add()
2169 spa->spa_imp_kstat->ks_data = sip; in spa_import_progress_add()
2171 sip->sip_load_state.value.ui64 = (uint64_t)spa_load_state(spa); in spa_import_progress_add()
2179 spa->spa_imp_kstat->ks_lock = &spa->spa_imp_kstat_lock; in spa_import_progress_add()
2180 kstat_install(spa->spa_imp_kstat); in spa_import_progress_add()
2182 mutex_exit(&spa->spa_imp_kstat_lock); in spa_import_progress_add()
2186 spa_import_progress_remove(spa_t *spa) in spa_import_progress_remove() argument
2188 if (spa->spa_imp_kstat != NULL) { in spa_import_progress_remove()
2189 void *data = spa->spa_imp_kstat->ks_data; in spa_import_progress_remove()
2191 kstat_delete(spa->spa_imp_kstat); in spa_import_progress_remove()
2192 spa->spa_imp_kstat = NULL; in spa_import_progress_remove()
2317 spa_has_slogs(spa_t *spa) in spa_has_slogs() argument
2319 return (spa->spa_log_class->mc_rotor != NULL); in spa_has_slogs()
2323 spa_get_log_state(spa_t *spa) in spa_get_log_state() argument
2325 return (spa->spa_log_state); in spa_get_log_state()
2329 spa_set_log_state(spa_t *spa, spa_log_state_t state) in spa_set_log_state() argument
2331 spa->spa_log_state = state; in spa_set_log_state()
2335 spa_is_root(spa_t *spa) in spa_is_root() argument
2337 return (spa->spa_is_root); in spa_is_root()
2341 spa_writeable(spa_t *spa) in spa_writeable() argument
2343 return (!!(spa->spa_mode & FWRITE) && spa->spa_trust_config); in spa_writeable()
2351 spa_has_pending_synctask(spa_t *spa) in spa_has_pending_synctask() argument
2353 return (!txg_all_lists_empty(&spa->spa_dsl_pool->dp_sync_tasks) || in spa_has_pending_synctask()
2354 !txg_all_lists_empty(&spa->spa_dsl_pool->dp_early_sync_tasks)); in spa_has_pending_synctask()
2358 spa_mode(spa_t *spa) in spa_mode() argument
2360 return (spa->spa_mode); in spa_mode()
2364 spa_bootfs(spa_t *spa) in spa_bootfs() argument
2366 return (spa->spa_bootfs); in spa_bootfs()
2370 spa_delegation(spa_t *spa) in spa_delegation() argument
2372 return (spa->spa_delegation); in spa_delegation()
2376 spa_meta_objset(spa_t *spa) in spa_meta_objset() argument
2378 return (spa->spa_meta_objset); in spa_meta_objset()
2382 spa_dedup_checksum(spa_t *spa) in spa_dedup_checksum() argument
2384 return (spa->spa_dedup_checksum); in spa_dedup_checksum()
2391 spa_scan_stat_init(spa_t *spa) in spa_scan_stat_init() argument
2394 spa->spa_scan_pass_start = gethrestime_sec(); in spa_scan_stat_init()
2395 if (dsl_scan_is_paused_scrub(spa->spa_dsl_pool->dp_scan)) in spa_scan_stat_init()
2396 spa->spa_scan_pass_scrub_pause = spa->spa_scan_pass_start; in spa_scan_stat_init()
2398 spa->spa_scan_pass_scrub_pause = 0; in spa_scan_stat_init()
2399 spa->spa_scan_pass_scrub_spent_paused = 0; in spa_scan_stat_init()
2400 spa->spa_scan_pass_exam = 0; in spa_scan_stat_init()
2401 spa->spa_scan_pass_issued = 0; in spa_scan_stat_init()
2402 vdev_scan_stat_init(spa->spa_root_vdev); in spa_scan_stat_init()
2409 spa_scan_get_stats(spa_t *spa, pool_scan_stat_t *ps) in spa_scan_get_stats() argument
2411 dsl_scan_t *scn = spa->spa_dsl_pool ? spa->spa_dsl_pool->dp_scan : NULL; in spa_scan_get_stats()
2428 scn->scn_issued_before_pass + spa->spa_scan_pass_issued; in spa_scan_get_stats()
2432 ps->pss_pass_start = spa->spa_scan_pass_start; in spa_scan_get_stats()
2433 ps->pss_pass_exam = spa->spa_scan_pass_exam; in spa_scan_get_stats()
2434 ps->pss_pass_issued = spa->spa_scan_pass_issued; in spa_scan_get_stats()
2435 ps->pss_pass_scrub_pause = spa->spa_scan_pass_scrub_pause; in spa_scan_get_stats()
2436 ps->pss_pass_scrub_spent_paused = spa->spa_scan_pass_scrub_spent_paused; in spa_scan_get_stats()
2442 spa_maxblocksize(spa_t *spa) in spa_maxblocksize() argument
2444 if (spa_feature_is_enabled(spa, SPA_FEATURE_LARGE_BLOCKS)) in spa_maxblocksize()
2451 spa_maxdnodesize(spa_t *spa) in spa_maxdnodesize() argument
2453 if (spa_feature_is_enabled(spa, SPA_FEATURE_LARGE_DNODE)) in spa_maxdnodesize()
2460 spa_multihost(spa_t *spa) in spa_multihost() argument
2462 return (spa->spa_multihost ? B_TRUE : B_FALSE); in spa_multihost()
2488 spa_get_last_removal_txg(spa_t *spa) in spa_get_last_removal_txg() argument
2493 spa_config_enter(spa, SCL_VDEV, FTAG, RW_READER); in spa_get_last_removal_txg()
2499 vdevid = spa->spa_removing_phys.sr_prev_indirect_vdev; in spa_get_last_removal_txg()
2502 vdev_t *vd = vdev_lookup_top(spa, vdevid); in spa_get_last_removal_txg()
2517 spa_config_exit(spa, SCL_VDEV, FTAG); in spa_get_last_removal_txg()
2520 spa_feature_is_active(spa, SPA_FEATURE_DEVICE_REMOVAL)); in spa_get_last_removal_txg()
2526 spa_trust_config(spa_t *spa) in spa_trust_config() argument
2528 return (spa->spa_trust_config); in spa_trust_config()
2532 spa_missing_tvds_allowed(spa_t *spa) in spa_missing_tvds_allowed() argument
2534 return (spa->spa_missing_tvds_allowed); in spa_missing_tvds_allowed()
2538 spa_syncing_log_sm(spa_t *spa) in spa_syncing_log_sm() argument
2540 return (spa->spa_syncing_log_sm); in spa_syncing_log_sm()
2544 spa_set_missing_tvds(spa_t *spa, uint64_t missing) in spa_set_missing_tvds() argument
2546 spa->spa_missing_tvds = missing; in spa_set_missing_tvds()
2550 spa_top_vdevs_spacemap_addressable(spa_t *spa) in spa_top_vdevs_spacemap_addressable() argument
2552 vdev_t *rvd = spa->spa_root_vdev; in spa_top_vdevs_spacemap_addressable()
2561 spa_has_checkpoint(spa_t *spa) in spa_has_checkpoint() argument
2563 return (spa->spa_checkpoint_txg != 0); in spa_has_checkpoint()
2567 spa_importing_readonly_checkpoint(spa_t *spa) in spa_importing_readonly_checkpoint() argument
2569 return ((spa->spa_import_flags & ZFS_IMPORT_CHECKPOINT) && in spa_importing_readonly_checkpoint()
2570 spa->spa_mode == FREAD); in spa_importing_readonly_checkpoint()
2574 spa_min_claim_txg(spa_t *spa) in spa_min_claim_txg() argument
2576 uint64_t checkpoint_txg = spa->spa_uberblock.ub_checkpoint_txg; in spa_min_claim_txg()
2581 return (spa->spa_first_txg); in spa_min_claim_txg()
2591 spa_suspend_async_destroy(spa_t *spa) in spa_suspend_async_destroy() argument
2593 dsl_pool_t *dp = spa_get_dsl(spa); in spa_suspend_async_destroy()
2600 if (spa_has_checkpoint(spa) && avail == 0) in spa_suspend_async_destroy()