Lines Matching refs:vd

157 vdev_dbgmsg(vdev_t *vd, const char *fmt, ...)  in vdev_dbgmsg()  argument
166 if (vd->vdev_path != NULL) { in vdev_dbgmsg()
167 zfs_dbgmsg("%s vdev '%s': %s", vd->vdev_ops->vdev_op_type, in vdev_dbgmsg()
168 vd->vdev_path, buf); in vdev_dbgmsg()
171 vd->vdev_ops->vdev_op_type, in vdev_dbgmsg()
172 (u_longlong_t)vd->vdev_id, in vdev_dbgmsg()
173 (u_longlong_t)vd->vdev_guid, buf); in vdev_dbgmsg()
178 vdev_dbgmsg_print_tree(vdev_t *vd, int indent) in vdev_dbgmsg_print_tree() argument
182 if (vd->vdev_ishole || vd->vdev_ops == &vdev_missing_ops) { in vdev_dbgmsg_print_tree()
184 (u_longlong_t)vd->vdev_id, in vdev_dbgmsg_print_tree()
185 vd->vdev_ops->vdev_op_type); in vdev_dbgmsg_print_tree()
189 switch (vd->vdev_state) { in vdev_dbgmsg_print_tree()
216 (uint_t)vd->vdev_state); in vdev_dbgmsg_print_tree()
220 "", (int)vd->vdev_id, vd->vdev_ops->vdev_op_type, in vdev_dbgmsg_print_tree()
221 vd->vdev_islog ? " (log)" : "", in vdev_dbgmsg_print_tree()
222 (u_longlong_t)vd->vdev_guid, in vdev_dbgmsg_print_tree()
223 vd->vdev_path ? vd->vdev_path : "N/A", state); in vdev_dbgmsg_print_tree()
225 for (uint64_t i = 0; i < vd->vdev_children; i++) in vdev_dbgmsg_print_tree()
226 vdev_dbgmsg_print_tree(vd->vdev_child[i], indent + 2); in vdev_dbgmsg_print_tree()
271 vdev_get_mg(vdev_t *vd, metaslab_class_t *mc) in vdev_get_mg() argument
273 if (mc == spa_embedded_log_class(vd->vdev_spa) && in vdev_get_mg()
274 vd->vdev_log_mg != NULL) in vdev_get_mg()
275 return (vd->vdev_log_mg); in vdev_get_mg()
277 return (vd->vdev_mg); in vdev_get_mg()
281 vdev_default_xlate(vdev_t *vd, const range_seg64_t *logical_rs, in vdev_default_xlate() argument
284 (void) vd, (void) remain_rs; in vdev_default_xlate()
314 vdev_default_asize(vdev_t *vd, uint64_t psize, uint64_t txg) in vdev_default_asize() argument
316 uint64_t asize = P2ROUNDUP(psize, 1ULL << vd->vdev_top->vdev_ashift); in vdev_default_asize()
319 for (int c = 0; c < vd->vdev_children; c++) { in vdev_default_asize()
320 csize = vdev_psize_to_asize_txg(vd->vdev_child[c], psize, txg); in vdev_default_asize()
328 vdev_default_min_asize(vdev_t *vd) in vdev_default_min_asize() argument
330 return (vd->vdev_min_asize); in vdev_default_min_asize()
340 vdev_get_min_asize(vdev_t *vd) in vdev_get_min_asize() argument
342 vdev_t *pvd = vd->vdev_parent; in vdev_get_min_asize()
349 return (vd->vdev_asize); in vdev_get_min_asize()
355 if (vd == vd->vdev_top) in vdev_get_min_asize()
356 return (P2ALIGN_TYPED(vd->vdev_asize, 1ULL << vd->vdev_ms_shift, in vdev_get_min_asize()
363 vdev_set_min_asize(vdev_t *vd) in vdev_set_min_asize() argument
365 vd->vdev_min_asize = vdev_get_min_asize(vd); in vdev_set_min_asize()
367 for (int c = 0; c < vd->vdev_children; c++) in vdev_set_min_asize()
368 vdev_set_min_asize(vd->vdev_child[c]); in vdev_set_min_asize()
375 vdev_get_min_alloc(vdev_t *vd) in vdev_get_min_alloc() argument
377 uint64_t min_alloc = 1ULL << vd->vdev_ashift; in vdev_get_min_alloc()
379 if (vd->vdev_ops->vdev_op_min_alloc != NULL) in vdev_get_min_alloc()
380 min_alloc = vd->vdev_ops->vdev_op_min_alloc(vd); in vdev_get_min_alloc()
389 vdev_get_nparity(vdev_t *vd) in vdev_get_nparity() argument
393 if (vd->vdev_ops->vdev_op_nparity != NULL) in vdev_get_nparity()
394 nparity = vd->vdev_ops->vdev_op_nparity(vd); in vdev_get_nparity()
400 vdev_prop_get_int(vdev_t *vd, vdev_prop_t prop, uint64_t *value) in vdev_prop_get_int() argument
402 spa_t *spa = vd->vdev_spa; in vdev_prop_get_int()
407 if (vd->vdev_root_zap != 0) { in vdev_prop_get_int()
408 objid = vd->vdev_root_zap; in vdev_prop_get_int()
409 } else if (vd->vdev_top_zap != 0) { in vdev_prop_get_int()
410 objid = vd->vdev_top_zap; in vdev_prop_get_int()
411 } else if (vd->vdev_leaf_zap != 0) { in vdev_prop_get_int()
412 objid = vd->vdev_leaf_zap; in vdev_prop_get_int()
430 vdev_get_ndisks(vdev_t *vd) in vdev_get_ndisks() argument
434 if (vd->vdev_ops->vdev_op_ndisks != NULL) in vdev_get_ndisks()
435 ndisks = vd->vdev_ops->vdev_op_ndisks(vd); in vdev_get_ndisks()
456 vdev_lookup_by_guid(vdev_t *vd, uint64_t guid) in vdev_lookup_by_guid() argument
460 if (vd->vdev_guid == guid) in vdev_lookup_by_guid()
461 return (vd); in vdev_lookup_by_guid()
463 for (int c = 0; c < vd->vdev_children; c++) in vdev_lookup_by_guid()
464 if ((mvd = vdev_lookup_by_guid(vd->vdev_child[c], guid)) != in vdev_lookup_by_guid()
472 vdev_count_leaves_impl(vdev_t *vd) in vdev_count_leaves_impl() argument
476 if (vd->vdev_ops->vdev_op_leaf) in vdev_count_leaves_impl()
479 for (int c = 0; c < vd->vdev_children; c++) in vdev_count_leaves_impl()
480 n += vdev_count_leaves_impl(vd->vdev_child[c]); in vdev_count_leaves_impl()
625 vdev_t *vd; in vdev_alloc_common() local
628 vd = kmem_zalloc(sizeof (vdev_t), KM_SLEEP); in vdev_alloc_common()
629 vic = &vd->vdev_indirect_config; in vdev_alloc_common()
633 spa->spa_root_vdev = vd; in vdev_alloc_common()
638 if (spa->spa_root_vdev == vd) { in vdev_alloc_common()
653 vd->vdev_spa = spa; in vdev_alloc_common()
654 vd->vdev_id = id; in vdev_alloc_common()
655 vd->vdev_guid = guid; in vdev_alloc_common()
656 vd->vdev_guid_sum = guid; in vdev_alloc_common()
657 vd->vdev_ops = ops; in vdev_alloc_common()
658 vd->vdev_state = VDEV_STATE_CLOSED; in vdev_alloc_common()
659 vd->vdev_ishole = (ops == &vdev_hole_ops); in vdev_alloc_common()
662 rw_init(&vd->vdev_indirect_rwlock, NULL, RW_DEFAULT, NULL); in vdev_alloc_common()
663 mutex_init(&vd->vdev_obsolete_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
664 vd->vdev_obsolete_segments = range_tree_create(NULL, RANGE_SEG64, NULL, in vdev_alloc_common()
672 zfs_ratelimit_init(&vd->vdev_delay_rl, &zfs_slow_io_events_per_second, in vdev_alloc_common()
674 zfs_ratelimit_init(&vd->vdev_deadman_rl, &zfs_deadman_events_per_second, in vdev_alloc_common()
676 zfs_ratelimit_init(&vd->vdev_checksum_rl, in vdev_alloc_common()
682 vd->vdev_checksum_n = vdev_prop_default_numeric(VDEV_PROP_CHECKSUM_N); in vdev_alloc_common()
683 vd->vdev_checksum_t = vdev_prop_default_numeric(VDEV_PROP_CHECKSUM_T); in vdev_alloc_common()
684 vd->vdev_io_n = vdev_prop_default_numeric(VDEV_PROP_IO_N); in vdev_alloc_common()
685 vd->vdev_io_t = vdev_prop_default_numeric(VDEV_PROP_IO_T); in vdev_alloc_common()
686 vd->vdev_slow_io_n = vdev_prop_default_numeric(VDEV_PROP_SLOW_IO_N); in vdev_alloc_common()
687 vd->vdev_slow_io_t = vdev_prop_default_numeric(VDEV_PROP_SLOW_IO_T); in vdev_alloc_common()
689 list_link_init(&vd->vdev_config_dirty_node); in vdev_alloc_common()
690 list_link_init(&vd->vdev_state_dirty_node); in vdev_alloc_common()
691 list_link_init(&vd->vdev_initialize_node); in vdev_alloc_common()
692 list_link_init(&vd->vdev_leaf_node); in vdev_alloc_common()
693 list_link_init(&vd->vdev_trim_node); in vdev_alloc_common()
695 mutex_init(&vd->vdev_dtl_lock, NULL, MUTEX_NOLOCKDEP, NULL); in vdev_alloc_common()
696 mutex_init(&vd->vdev_stat_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
697 mutex_init(&vd->vdev_probe_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
698 mutex_init(&vd->vdev_scan_io_queue_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
700 mutex_init(&vd->vdev_initialize_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
701 mutex_init(&vd->vdev_initialize_io_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
702 cv_init(&vd->vdev_initialize_cv, NULL, CV_DEFAULT, NULL); in vdev_alloc_common()
703 cv_init(&vd->vdev_initialize_io_cv, NULL, CV_DEFAULT, NULL); in vdev_alloc_common()
705 mutex_init(&vd->vdev_trim_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
706 mutex_init(&vd->vdev_autotrim_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
707 mutex_init(&vd->vdev_trim_io_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
708 cv_init(&vd->vdev_trim_cv, NULL, CV_DEFAULT, NULL); in vdev_alloc_common()
709 cv_init(&vd->vdev_autotrim_cv, NULL, CV_DEFAULT, NULL); in vdev_alloc_common()
710 cv_init(&vd->vdev_autotrim_kick_cv, NULL, CV_DEFAULT, NULL); in vdev_alloc_common()
711 cv_init(&vd->vdev_trim_io_cv, NULL, CV_DEFAULT, NULL); in vdev_alloc_common()
713 mutex_init(&vd->vdev_rebuild_lock, NULL, MUTEX_DEFAULT, NULL); in vdev_alloc_common()
714 cv_init(&vd->vdev_rebuild_cv, NULL, CV_DEFAULT, NULL); in vdev_alloc_common()
717 vd->vdev_dtl[t] = range_tree_create(NULL, RANGE_SEG64, NULL, 0, in vdev_alloc_common()
721 txg_list_create(&vd->vdev_ms_list, spa, in vdev_alloc_common()
723 txg_list_create(&vd->vdev_dtl_list, spa, in vdev_alloc_common()
725 vd->vdev_stat.vs_timestamp = gethrtime(); in vdev_alloc_common()
726 vdev_queue_init(vd); in vdev_alloc_common()
728 return (vd); in vdev_alloc_common()
743 vdev_t *vd; in vdev_alloc() local
839 vd = vdev_alloc_common(spa, id, guid, ops); in vdev_alloc()
840 vd->vdev_tsd = tsd; in vdev_alloc()
841 vd->vdev_islog = islog; in vdev_alloc()
844 vd->vdev_alloc_bias = alloc_bias; in vdev_alloc()
847 vd->vdev_path = spa_strdup(tmp); in vdev_alloc()
856 vd->vdev_stat.vs_aux = VDEV_AUX_EXTERNAL; in vdev_alloc()
857 vd->vdev_faulted = 1; in vdev_alloc()
858 vd->vdev_label_aux = VDEV_AUX_EXTERNAL; in vdev_alloc()
862 vd->vdev_devid = spa_strdup(tmp); in vdev_alloc()
864 vd->vdev_physpath = spa_strdup(tmp); in vdev_alloc()
868 vd->vdev_enc_sysfs_path = spa_strdup(tmp); in vdev_alloc()
871 vd->vdev_fru = spa_strdup(tmp); in vdev_alloc()
878 &vd->vdev_wholedisk) != 0) in vdev_alloc()
879 vd->vdev_wholedisk = -1ULL; in vdev_alloc()
881 vic = &vd->vdev_indirect_config; in vdev_alloc()
898 &vd->vdev_not_present); in vdev_alloc()
906 &vd->vdev_ashift); in vdev_alloc()
908 vd->vdev_attaching = B_TRUE; in vdev_alloc()
915 &vd->vdev_crtxg); in vdev_alloc()
917 if (vd->vdev_ops == &vdev_root_ops && in vdev_alloc()
922 &vd->vdev_root_zap); in vdev_alloc()
931 &vd->vdev_ms_array); in vdev_alloc()
933 &vd->vdev_ms_shift); in vdev_alloc()
935 &vd->vdev_asize); in vdev_alloc()
937 &vd->vdev_noalloc); in vdev_alloc()
939 &vd->vdev_removing); in vdev_alloc()
941 &vd->vdev_top_zap); in vdev_alloc()
942 vd->vdev_rz_expanding = nvlist_exists(nv, in vdev_alloc()
945 ASSERT0(vd->vdev_top_zap); in vdev_alloc()
956 if (vd->vdev_ops->vdev_op_leaf && in vdev_alloc()
959 ZPOOL_CONFIG_VDEV_LEAF_ZAP, &vd->vdev_leaf_zap); in vdev_alloc()
961 ASSERT0(vd->vdev_leaf_zap); in vdev_alloc()
968 if (vd->vdev_ops->vdev_op_leaf && in vdev_alloc()
973 &vd->vdev_dtl_object); in vdev_alloc()
975 &vd->vdev_unspare); in vdev_alloc()
983 spa_spare_add(vd); in vdev_alloc()
987 &vd->vdev_offline); in vdev_alloc()
990 &vd->vdev_resilver_txg); in vdev_alloc()
993 &vd->vdev_rebuild_txg); in vdev_alloc()
996 vdev_defer_resilver(vd); in vdev_alloc()
1011 &vd->vdev_faulted); in vdev_alloc()
1013 &vd->vdev_degraded); in vdev_alloc()
1015 &vd->vdev_removed); in vdev_alloc()
1017 if (vd->vdev_faulted || vd->vdev_degraded) { in vdev_alloc()
1020 vd->vdev_label_aux = in vdev_alloc()
1025 vd->vdev_label_aux = VDEV_AUX_EXTERNAL; in vdev_alloc()
1027 vd->vdev_faulted = 0ULL; in vdev_alloc()
1035 vdev_add_child(parent, vd); in vdev_alloc()
1037 *vdp = vd; in vdev_alloc()
1043 vdev_free(vdev_t *vd) in vdev_free() argument
1045 spa_t *spa = vd->vdev_spa; in vdev_free()
1047 ASSERT3P(vd->vdev_initialize_thread, ==, NULL); in vdev_free()
1048 ASSERT3P(vd->vdev_trim_thread, ==, NULL); in vdev_free()
1049 ASSERT3P(vd->vdev_autotrim_thread, ==, NULL); in vdev_free()
1050 ASSERT3P(vd->vdev_rebuild_thread, ==, NULL); in vdev_free()
1057 if (vd->vdev_scan_io_queue != NULL) { in vdev_free()
1058 mutex_enter(&vd->vdev_scan_io_queue_lock); in vdev_free()
1059 dsl_scan_io_queue_destroy(vd->vdev_scan_io_queue); in vdev_free()
1060 vd->vdev_scan_io_queue = NULL; in vdev_free()
1061 mutex_exit(&vd->vdev_scan_io_queue_lock); in vdev_free()
1068 vdev_close(vd); in vdev_free()
1070 ASSERT(!list_link_active(&vd->vdev_config_dirty_node)); in vdev_free()
1071 ASSERT(!list_link_active(&vd->vdev_state_dirty_node)); in vdev_free()
1076 for (int c = 0; c < vd->vdev_children; c++) in vdev_free()
1077 vdev_free(vd->vdev_child[c]); in vdev_free()
1079 ASSERT(vd->vdev_child == NULL); in vdev_free()
1080 ASSERT(vd->vdev_guid_sum == vd->vdev_guid); in vdev_free()
1082 if (vd->vdev_ops->vdev_op_fini != NULL) in vdev_free()
1083 vd->vdev_ops->vdev_op_fini(vd); in vdev_free()
1088 if (vd->vdev_mg != NULL) { in vdev_free()
1089 vdev_metaslab_fini(vd); in vdev_free()
1090 metaslab_group_destroy(vd->vdev_mg); in vdev_free()
1091 vd->vdev_mg = NULL; in vdev_free()
1093 if (vd->vdev_log_mg != NULL) { in vdev_free()
1094 ASSERT0(vd->vdev_ms_count); in vdev_free()
1095 metaslab_group_destroy(vd->vdev_log_mg); in vdev_free()
1096 vd->vdev_log_mg = NULL; in vdev_free()
1099 ASSERT0(vd->vdev_stat.vs_space); in vdev_free()
1100 ASSERT0(vd->vdev_stat.vs_dspace); in vdev_free()
1101 ASSERT0(vd->vdev_stat.vs_alloc); in vdev_free()
1106 vdev_remove_child(vd->vdev_parent, vd); in vdev_free()
1108 ASSERT(vd->vdev_parent == NULL); in vdev_free()
1109 ASSERT(!list_link_active(&vd->vdev_leaf_node)); in vdev_free()
1114 vdev_queue_fini(vd); in vdev_free()
1116 if (vd->vdev_path) in vdev_free()
1117 spa_strfree(vd->vdev_path); in vdev_free()
1118 if (vd->vdev_devid) in vdev_free()
1119 spa_strfree(vd->vdev_devid); in vdev_free()
1120 if (vd->vdev_physpath) in vdev_free()
1121 spa_strfree(vd->vdev_physpath); in vdev_free()
1123 if (vd->vdev_enc_sysfs_path) in vdev_free()
1124 spa_strfree(vd->vdev_enc_sysfs_path); in vdev_free()
1126 if (vd->vdev_fru) in vdev_free()
1127 spa_strfree(vd->vdev_fru); in vdev_free()
1129 if (vd->vdev_isspare) in vdev_free()
1130 spa_spare_remove(vd); in vdev_free()
1131 if (vd->vdev_isl2cache) in vdev_free()
1132 spa_l2cache_remove(vd); in vdev_free()
1134 txg_list_destroy(&vd->vdev_ms_list); in vdev_free()
1135 txg_list_destroy(&vd->vdev_dtl_list); in vdev_free()
1137 mutex_enter(&vd->vdev_dtl_lock); in vdev_free()
1138 space_map_close(vd->vdev_dtl_sm); in vdev_free()
1140 range_tree_vacate(vd->vdev_dtl[t], NULL, NULL); in vdev_free()
1141 range_tree_destroy(vd->vdev_dtl[t]); in vdev_free()
1143 mutex_exit(&vd->vdev_dtl_lock); in vdev_free()
1145 EQUIV(vd->vdev_indirect_births != NULL, in vdev_free()
1146 vd->vdev_indirect_mapping != NULL); in vdev_free()
1147 if (vd->vdev_indirect_births != NULL) { in vdev_free()
1148 vdev_indirect_mapping_close(vd->vdev_indirect_mapping); in vdev_free()
1149 vdev_indirect_births_close(vd->vdev_indirect_births); in vdev_free()
1152 if (vd->vdev_obsolete_sm != NULL) { in vdev_free()
1153 ASSERT(vd->vdev_removing || in vdev_free()
1154 vd->vdev_ops == &vdev_indirect_ops); in vdev_free()
1155 space_map_close(vd->vdev_obsolete_sm); in vdev_free()
1156 vd->vdev_obsolete_sm = NULL; in vdev_free()
1158 range_tree_destroy(vd->vdev_obsolete_segments); in vdev_free()
1159 rw_destroy(&vd->vdev_indirect_rwlock); in vdev_free()
1160 mutex_destroy(&vd->vdev_obsolete_lock); in vdev_free()
1162 mutex_destroy(&vd->vdev_dtl_lock); in vdev_free()
1163 mutex_destroy(&vd->vdev_stat_lock); in vdev_free()
1164 mutex_destroy(&vd->vdev_probe_lock); in vdev_free()
1165 mutex_destroy(&vd->vdev_scan_io_queue_lock); in vdev_free()
1167 mutex_destroy(&vd->vdev_initialize_lock); in vdev_free()
1168 mutex_destroy(&vd->vdev_initialize_io_lock); in vdev_free()
1169 cv_destroy(&vd->vdev_initialize_io_cv); in vdev_free()
1170 cv_destroy(&vd->vdev_initialize_cv); in vdev_free()
1172 mutex_destroy(&vd->vdev_trim_lock); in vdev_free()
1173 mutex_destroy(&vd->vdev_autotrim_lock); in vdev_free()
1174 mutex_destroy(&vd->vdev_trim_io_lock); in vdev_free()
1175 cv_destroy(&vd->vdev_trim_cv); in vdev_free()
1176 cv_destroy(&vd->vdev_autotrim_cv); in vdev_free()
1177 cv_destroy(&vd->vdev_autotrim_kick_cv); in vdev_free()
1178 cv_destroy(&vd->vdev_trim_io_cv); in vdev_free()
1180 mutex_destroy(&vd->vdev_rebuild_lock); in vdev_free()
1181 cv_destroy(&vd->vdev_rebuild_cv); in vdev_free()
1183 zfs_ratelimit_fini(&vd->vdev_delay_rl); in vdev_free()
1184 zfs_ratelimit_fini(&vd->vdev_deadman_rl); in vdev_free()
1185 zfs_ratelimit_fini(&vd->vdev_checksum_rl); in vdev_free()
1187 if (vd == spa->spa_root_vdev) in vdev_free()
1190 kmem_free(vd, sizeof (vdev_t)); in vdev_free()
1201 vdev_t *vd; in vdev_top_transfer() local
1283 while ((vd = txg_list_remove(&svd->vdev_dtl_list, t)) != NULL) in vdev_top_transfer()
1284 (void) txg_list_add(&tvd->vdev_dtl_list, vd, t); in vdev_top_transfer()
1309 vdev_top_update(vdev_t *tvd, vdev_t *vd) in vdev_top_update() argument
1311 if (vd == NULL) in vdev_top_update()
1314 vd->vdev_top = tvd; in vdev_top_update()
1316 for (int c = 0; c < vd->vdev_children; c++) in vdev_top_update()
1317 vdev_top_update(tvd, vd->vdev_child[c]); in vdev_top_update()
1443 vdev_metaslab_group_create(vdev_t *vd) in vdev_metaslab_group_create() argument
1445 spa_t *spa = vd->vdev_spa; in vdev_metaslab_group_create()
1450 if (vd->vdev_mg == NULL) { in vdev_metaslab_group_create()
1453 if (vd->vdev_islog && vd->vdev_alloc_bias == VDEV_BIAS_NONE) in vdev_metaslab_group_create()
1454 vd->vdev_alloc_bias = VDEV_BIAS_LOG; in vdev_metaslab_group_create()
1456 ASSERT3U(vd->vdev_islog, ==, in vdev_metaslab_group_create()
1457 (vd->vdev_alloc_bias == VDEV_BIAS_LOG)); in vdev_metaslab_group_create()
1459 switch (vd->vdev_alloc_bias) { in vdev_metaslab_group_create()
1473 vd->vdev_mg = metaslab_group_create(mc, vd, in vdev_metaslab_group_create()
1476 if (!vd->vdev_islog) { in vdev_metaslab_group_create()
1477 vd->vdev_log_mg = metaslab_group_create( in vdev_metaslab_group_create()
1478 spa_embedded_log_class(spa), vd, 1); in vdev_metaslab_group_create()
1486 if (vd->vdev_top == vd && vd->vdev_ashift != 0 && in vdev_metaslab_group_create()
1487 mc == spa_normal_class(spa) && vd->vdev_aux == NULL) { in vdev_metaslab_group_create()
1488 if (vd->vdev_ashift > spa->spa_max_ashift) in vdev_metaslab_group_create()
1489 spa->spa_max_ashift = vd->vdev_ashift; in vdev_metaslab_group_create()
1490 if (vd->vdev_ashift < spa->spa_min_ashift) in vdev_metaslab_group_create()
1491 spa->spa_min_ashift = vd->vdev_ashift; in vdev_metaslab_group_create()
1493 uint64_t min_alloc = vdev_get_min_alloc(vd); in vdev_metaslab_group_create()
1500 vdev_metaslab_init(vdev_t *vd, uint64_t txg) in vdev_metaslab_init() argument
1502 spa_t *spa = vd->vdev_spa; in vdev_metaslab_init()
1503 uint64_t oldc = vd->vdev_ms_count; in vdev_metaslab_init()
1504 uint64_t newc = vd->vdev_asize >> vd->vdev_ms_shift; in vdev_metaslab_init()
1514 if (vd->vdev_ms_shift == 0) in vdev_metaslab_init()
1517 ASSERT(!vd->vdev_ishole); in vdev_metaslab_init()
1524 memcpy(mspp, vd->vdev_ms, oldc * sizeof (*mspp)); in vdev_metaslab_init()
1525 vmem_free(vd->vdev_ms, oldc * sizeof (*mspp)); in vdev_metaslab_init()
1528 vd->vdev_ms = mspp; in vdev_metaslab_init()
1529 vd->vdev_ms_count = newc; in vdev_metaslab_init()
1538 if (txg == 0 && vd->vdev_ms_array != 0) { in vdev_metaslab_init()
1540 vd->vdev_ms_array, in vdev_metaslab_init()
1544 vdev_dbgmsg(vd, "unable to read the metaslab " in vdev_metaslab_init()
1550 error = metaslab_init(vd->vdev_mg, m, object, txg, in vdev_metaslab_init()
1551 &(vd->vdev_ms[m])); in vdev_metaslab_init()
1553 vdev_dbgmsg(vd, "metaslab_init failed [error=%d]", in vdev_metaslab_init()
1564 if (vd->vdev_mg->mg_class == spa_normal_class(spa) && in vdev_metaslab_init()
1565 vd->vdev_ms_count > zfs_embedded_slog_min_ms && in vdev_metaslab_init()
1566 avl_is_empty(&vd->vdev_log_mg->mg_metaslab_tree)) { in vdev_metaslab_init()
1578 space_map_allocated(vd->vdev_ms[m]->ms_sm); in vdev_metaslab_init()
1584 metaslab_t *slog_ms = vd->vdev_ms[slog_msid]; in vdev_metaslab_init()
1591 (void) txg_list_remove_this(&vd->vdev_ms_list, in vdev_metaslab_init()
1596 VERIFY0(metaslab_init(vd->vdev_log_mg, slog_msid, sm_obj, txg, in vdev_metaslab_init()
1597 &vd->vdev_ms[slog_msid])); in vdev_metaslab_init()
1608 if (vd->vdev_noalloc) { in vdev_metaslab_init()
1611 vd->vdev_stat.vs_dspace : vd->vdev_stat.vs_space; in vdev_metaslab_init()
1613 metaslab_group_activate(vd->vdev_mg); in vdev_metaslab_init()
1614 if (vd->vdev_log_mg != NULL) in vdev_metaslab_init()
1615 metaslab_group_activate(vd->vdev_log_mg); in vdev_metaslab_init()
1625 vdev_metaslab_fini(vdev_t *vd) in vdev_metaslab_fini() argument
1627 if (vd->vdev_checkpoint_sm != NULL) { in vdev_metaslab_fini()
1628 ASSERT(spa_feature_is_active(vd->vdev_spa, in vdev_metaslab_fini()
1630 space_map_close(vd->vdev_checkpoint_sm); in vdev_metaslab_fini()
1639 vd->vdev_checkpoint_sm = NULL; in vdev_metaslab_fini()
1642 if (vd->vdev_ms != NULL) { in vdev_metaslab_fini()
1643 metaslab_group_t *mg = vd->vdev_mg; in vdev_metaslab_fini()
1646 if (vd->vdev_log_mg != NULL) { in vdev_metaslab_fini()
1647 ASSERT(!vd->vdev_islog); in vdev_metaslab_fini()
1648 metaslab_group_passivate(vd->vdev_log_mg); in vdev_metaslab_fini()
1651 uint64_t count = vd->vdev_ms_count; in vdev_metaslab_fini()
1653 metaslab_t *msp = vd->vdev_ms[m]; in vdev_metaslab_fini()
1657 vmem_free(vd->vdev_ms, count * sizeof (metaslab_t *)); in vdev_metaslab_fini()
1658 vd->vdev_ms = NULL; in vdev_metaslab_fini()
1659 vd->vdev_ms_count = 0; in vdev_metaslab_fini()
1663 if (vd->vdev_log_mg != NULL) in vdev_metaslab_fini()
1664 ASSERT0(vd->vdev_log_mg->mg_histogram[i]); in vdev_metaslab_fini()
1667 ASSERT0(vd->vdev_ms_count); in vdev_metaslab_fini()
1681 vdev_t *vd = zio->io_vd; in vdev_probe_done() local
1684 ASSERT(vd->vdev_probe_zio != NULL); in vdev_probe_done()
1690 zio_nowait(zio_write_phys(vd->vdev_probe_zio, vd, in vdev_probe_done()
1705 vd->vdev_cant_read |= !vps->vps_readable; in vdev_probe_done()
1706 vd->vdev_cant_write |= !vps->vps_writeable; in vdev_probe_done()
1707 vdev_dbgmsg(vd, "probe done, cant_read=%u cant_write=%u", in vdev_probe_done()
1708 vd->vdev_cant_read, vd->vdev_cant_write); in vdev_probe_done()
1710 if (vdev_readable(vd) && in vdev_probe_done()
1711 (vdev_writeable(vd) || !spa_writeable(spa))) { in vdev_probe_done()
1715 vdev_dbgmsg(vd, "failed probe"); in vdev_probe_done()
1717 spa, vd, NULL, NULL, 0); in vdev_probe_done()
1727 vd->vdev_fault_wanted = B_TRUE; in vdev_probe_done()
1732 mutex_enter(&vd->vdev_probe_lock); in vdev_probe_done()
1733 ASSERT(vd->vdev_probe_zio == zio); in vdev_probe_done()
1734 vd->vdev_probe_zio = NULL; in vdev_probe_done()
1735 mutex_exit(&vd->vdev_probe_lock); in vdev_probe_done()
1739 if (!vdev_accessible(vd, pio)) in vdev_probe_done()
1754 vdev_probe(vdev_t *vd, zio_t *zio) in vdev_probe() argument
1756 spa_t *spa = vd->vdev_spa; in vdev_probe()
1760 ASSERT(vd->vdev_ops->vdev_op_leaf); in vdev_probe()
1773 mutex_enter(&vd->vdev_probe_lock); in vdev_probe()
1775 if ((pio = vd->vdev_probe_zio) == NULL) { in vdev_probe()
1800 vd->vdev_cant_read = B_FALSE; in vdev_probe()
1801 vd->vdev_cant_write = B_FALSE; in vdev_probe()
1804 vd->vdev_probe_zio = pio = zio_null(NULL, spa, vd, in vdev_probe()
1812 mutex_exit(&vd->vdev_probe_lock); in vdev_probe()
1820 zio_nowait(zio_read_phys(pio, vd, in vdev_probe()
1821 vdev_label_offset(vd->vdev_psize, l, in vdev_probe()
1838 vdev_t *vd = arg; in vdev_load_child() local
1840 vd->vdev_load_error = vdev_load(vd); in vdev_load_child()
1846 vdev_t *vd = arg; in vdev_open_child() local
1848 vd->vdev_open_thread = curthread; in vdev_open_child()
1849 vd->vdev_open_error = vdev_open(vd); in vdev_open_child()
1850 vd->vdev_open_thread = NULL; in vdev_open_child()
1854 vdev_uses_zvols(vdev_t *vd) in vdev_uses_zvols() argument
1857 if (zvol_is_zvol(vd->vdev_path)) in vdev_uses_zvols()
1861 for (int c = 0; c < vd->vdev_children; c++) in vdev_uses_zvols()
1862 if (vdev_uses_zvols(vd->vdev_child[c])) in vdev_uses_zvols()
1872 vdev_default_open_children_func(vdev_t *vd) in vdev_default_open_children_func() argument
1874 (void) vd; in vdev_default_open_children_func()
1884 vdev_open_children_impl(vdev_t *vd, vdev_open_children_func_t *open_func) in vdev_open_children_impl() argument
1886 int children = vd->vdev_children; in vdev_open_children_impl()
1890 vd->vdev_nonrot = B_TRUE; in vdev_open_children_impl()
1893 vdev_t *cvd = vd->vdev_child[c]; in vdev_open_children_impl()
1898 if (tq == NULL || vdev_uses_zvols(vd)) { in vdev_open_children_impl()
1905 vd->vdev_nonrot &= cvd->vdev_nonrot; in vdev_open_children_impl()
1918 vdev_open_children(vdev_t *vd) in vdev_open_children() argument
1920 vdev_open_children_impl(vd, vdev_default_open_children_func); in vdev_open_children()
1927 vdev_open_children_subset(vdev_t *vd, vdev_open_children_func_t *open_func) in vdev_open_children_subset() argument
1929 vdev_open_children_impl(vd, open_func); in vdev_open_children_subset()
1941 vdev_set_deflate_ratio(vdev_t *vd) in vdev_set_deflate_ratio() argument
1943 if (vd == vd->vdev_top && !vd->vdev_ishole && vd->vdev_ashift != 0) { in vdev_set_deflate_ratio()
1944 vd->vdev_deflate_ratio = (1 << 17) / in vdev_set_deflate_ratio()
1945 (vdev_psize_to_asize_txg(vd, 1 << 17, 0) >> in vdev_set_deflate_ratio()
1975 vdev_ashift_optimize(vdev_t *vd) in vdev_ashift_optimize() argument
1977 ASSERT(vd == vd->vdev_top); in vdev_ashift_optimize()
1979 if (vd->vdev_ashift < vd->vdev_physical_ashift && in vdev_ashift_optimize()
1980 vd->vdev_physical_ashift <= zfs_vdev_max_auto_ashift) { in vdev_ashift_optimize()
1981 vd->vdev_ashift = MIN( in vdev_ashift_optimize()
1982 MAX(zfs_vdev_max_auto_ashift, vd->vdev_ashift), in vdev_ashift_optimize()
1984 vd->vdev_physical_ashift)); in vdev_ashift_optimize()
1996 vd->vdev_ashift = MAX(zfs_vdev_min_auto_ashift, in vdev_ashift_optimize()
1997 vd->vdev_ashift); in vdev_ashift_optimize()
2005 vdev_open(vdev_t *vd) in vdev_open() argument
2007 spa_t *spa = vd->vdev_spa; in vdev_open()
2015 ASSERT(vd->vdev_open_thread == curthread || in vdev_open()
2017 ASSERT(vd->vdev_state == VDEV_STATE_CLOSED || in vdev_open()
2018 vd->vdev_state == VDEV_STATE_CANT_OPEN || in vdev_open()
2019 vd->vdev_state == VDEV_STATE_OFFLINE); in vdev_open()
2021 vd->vdev_stat.vs_aux = VDEV_AUX_NONE; in vdev_open()
2022 vd->vdev_cant_read = B_FALSE; in vdev_open()
2023 vd->vdev_cant_write = B_FALSE; in vdev_open()
2024 vd->vdev_fault_wanted = B_FALSE; in vdev_open()
2025 vd->vdev_min_asize = vdev_get_min_asize(vd); in vdev_open()
2031 if (!vd->vdev_removed && vd->vdev_faulted) { in vdev_open()
2032 ASSERT(vd->vdev_children == 0); in vdev_open()
2033 ASSERT(vd->vdev_label_aux == VDEV_AUX_ERR_EXCEEDED || in vdev_open()
2034 vd->vdev_label_aux == VDEV_AUX_EXTERNAL); in vdev_open()
2035 vdev_set_state(vd, B_TRUE, VDEV_STATE_FAULTED, in vdev_open()
2036 vd->vdev_label_aux); in vdev_open()
2038 } else if (vd->vdev_offline) { in vdev_open()
2039 ASSERT(vd->vdev_children == 0); in vdev_open()
2040 vdev_set_state(vd, B_TRUE, VDEV_STATE_OFFLINE, VDEV_AUX_NONE); in vdev_open()
2044 error = vd->vdev_ops->vdev_op_open(vd, &osize, &max_osize, in vdev_open()
2048 if (error == ENOENT && vd->vdev_removed) { in vdev_open()
2049 vdev_set_state(vd, B_TRUE, VDEV_STATE_REMOVED, in vdev_open()
2060 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2069 vd->vdev_reopening = B_FALSE; in vdev_open()
2071 error = zio_handle_device_injection(vd, NULL, SET_ERROR(ENXIO)); in vdev_open()
2074 if (vd->vdev_removed && in vdev_open()
2075 vd->vdev_stat.vs_aux != VDEV_AUX_OPEN_FAILED) in vdev_open()
2076 vd->vdev_removed = B_FALSE; in vdev_open()
2078 if (vd->vdev_stat.vs_aux == VDEV_AUX_CHILDREN_OFFLINE) { in vdev_open()
2079 vdev_set_state(vd, B_TRUE, VDEV_STATE_OFFLINE, in vdev_open()
2080 vd->vdev_stat.vs_aux); in vdev_open()
2082 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2083 vd->vdev_stat.vs_aux); in vdev_open()
2088 vd->vdev_removed = B_FALSE; in vdev_open()
2094 if (vd->vdev_faulted) { in vdev_open()
2095 ASSERT(vd->vdev_children == 0); in vdev_open()
2096 ASSERT(vd->vdev_label_aux == VDEV_AUX_ERR_EXCEEDED || in vdev_open()
2097 vd->vdev_label_aux == VDEV_AUX_EXTERNAL); in vdev_open()
2098 vdev_set_state(vd, B_TRUE, VDEV_STATE_FAULTED, in vdev_open()
2099 vd->vdev_label_aux); in vdev_open()
2103 if (vd->vdev_degraded) { in vdev_open()
2104 ASSERT(vd->vdev_children == 0); in vdev_open()
2105 vdev_set_state(vd, B_TRUE, VDEV_STATE_DEGRADED, in vdev_open()
2108 vdev_set_state(vd, B_TRUE, VDEV_STATE_HEALTHY, 0); in vdev_open()
2114 if (vd->vdev_ishole || vd->vdev_ops == &vdev_missing_ops) in vdev_open()
2117 for (int c = 0; c < vd->vdev_children; c++) { in vdev_open()
2118 if (vd->vdev_child[c]->vdev_state != VDEV_STATE_HEALTHY) { in vdev_open()
2119 vdev_set_state(vd, B_TRUE, VDEV_STATE_DEGRADED, in vdev_open()
2128 if (vd->vdev_children == 0) { in vdev_open()
2130 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2139 if (vd->vdev_parent != NULL && osize < SPA_MINDEVSIZE - in vdev_open()
2141 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2154 if ((psize > vd->vdev_psize) && (vd->vdev_psize != 0)) in vdev_open()
2155 vd->vdev_copy_uberblocks = B_TRUE; in vdev_open()
2157 vd->vdev_psize = psize; in vdev_open()
2162 if (asize < vd->vdev_min_asize) { in vdev_open()
2163 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2175 vd->vdev_physical_ashift = in vdev_open()
2176 MAX(physical_ashift, vd->vdev_physical_ashift); in vdev_open()
2177 vd->vdev_logical_ashift = MAX(logical_ashift, in vdev_open()
2178 vd->vdev_logical_ashift); in vdev_open()
2180 if (vd->vdev_asize == 0) { in vdev_open()
2185 vd->vdev_asize = asize; in vdev_open()
2186 vd->vdev_max_asize = max_asize; in vdev_open()
2192 if (vd->vdev_ashift == 0) { in vdev_open()
2193 vd->vdev_ashift = vd->vdev_logical_ashift; in vdev_open()
2195 if (vd->vdev_logical_ashift > ASHIFT_MAX) { in vdev_open()
2196 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2201 if (vd->vdev_top == vd && vd->vdev_attaching == B_FALSE) in vdev_open()
2202 vdev_ashift_optimize(vd); in vdev_open()
2203 vd->vdev_attaching = B_FALSE; in vdev_open()
2205 if (vd->vdev_ashift != 0 && (vd->vdev_ashift < ASHIFT_MIN || in vdev_open()
2206 vd->vdev_ashift > ASHIFT_MAX)) { in vdev_open()
2207 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2215 if (vd->vdev_ashift > vd->vdev_top->vdev_ashift && in vdev_open()
2216 vd->vdev_ops->vdev_op_leaf) { in vdev_open()
2219 spa, vd, NULL, NULL, 0); in vdev_open()
2220 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_open()
2224 vd->vdev_max_asize = max_asize; in vdev_open()
2239 if (vd->vdev_state == VDEV_STATE_HEALTHY && in vdev_open()
2240 ((asize > vd->vdev_asize && in vdev_open()
2241 (vd->vdev_expanding || spa->spa_autoexpand)) || in vdev_open()
2242 (asize < vd->vdev_asize))) in vdev_open()
2243 vd->vdev_asize = asize; in vdev_open()
2245 vdev_set_min_asize(vd); in vdev_open()
2251 if (vd->vdev_ops->vdev_op_leaf && in vdev_open()
2252 (error = zio_wait(vdev_probe(vd, NULL))) != 0) { in vdev_open()
2253 vdev_set_state(vd, B_TRUE, VDEV_STATE_FAULTED, in vdev_open()
2261 if (vd->vdev_top == vd && vd->vdev_ashift != 0 && in vdev_open()
2262 vd->vdev_islog == 0 && vd->vdev_aux == NULL) { in vdev_open()
2263 uint64_t min_alloc = vdev_get_min_alloc(vd); in vdev_open()
2272 if (vd->vdev_ops->vdev_op_leaf && !spa->spa_scrub_reopen) in vdev_open()
2273 dsl_scan_assess_vdev(spa->spa_dsl_pool, vd); in vdev_open()
2281 vdev_t *vd = arg; in vdev_validate_child() local
2283 vd->vdev_validate_thread = curthread; in vdev_validate_child()
2284 vd->vdev_validate_error = vdev_validate(vd); in vdev_validate_child()
2285 vd->vdev_validate_thread = NULL; in vdev_validate_child()
2299 vdev_validate(vdev_t *vd) in vdev_validate() argument
2301 spa_t *spa = vd->vdev_spa; in vdev_validate()
2308 int children = vd->vdev_children; in vdev_validate()
2319 vdev_t *cvd = vd->vdev_child[c]; in vdev_validate()
2333 int error = vd->vdev_child[c]->vdev_validate_error; in vdev_validate()
2345 if (!vd->vdev_ops->vdev_op_leaf || !vdev_readable(vd)) in vdev_validate()
2360 if ((label = vdev_label_read_config(vd, txg)) == NULL) { in vdev_validate()
2361 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2363 vdev_dbgmsg(vd, "vdev_validate: failed reading config for " in vdev_validate()
2374 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2377 vdev_dbgmsg(vd, "vdev_validate: vdev split into other pool"); in vdev_validate()
2382 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2385 vdev_dbgmsg(vd, "vdev_validate: '%s' missing from label", in vdev_validate()
2398 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2401 vdev_dbgmsg(vd, "vdev_validate: vdev label pool_guid doesn't " in vdev_validate()
2413 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2416 vdev_dbgmsg(vd, "vdev_validate: '%s' missing from label", in vdev_validate()
2423 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2426 vdev_dbgmsg(vd, "vdev_validate: '%s' missing from label", in vdev_validate()
2446 if (vd->vdev_guid != guid && vd->vdev_guid != aux_guid) { in vdev_validate()
2449 if (vd != vd->vdev_top || vd->vdev_guid != top_guid) in vdev_validate()
2452 if (vd->vdev_guid != top_guid && in vdev_validate()
2453 vd->vdev_top->vdev_guid != guid) in vdev_validate()
2458 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2461 vdev_dbgmsg(vd, "vdev_validate: config guid " in vdev_validate()
2463 vdev_dbgmsg(vd, "CONFIG: guid %llu, top_guid %llu", in vdev_validate()
2464 (u_longlong_t)vd->vdev_guid, in vdev_validate()
2465 (u_longlong_t)vd->vdev_top->vdev_guid); in vdev_validate()
2466 vdev_dbgmsg(vd, "LABEL: guid %llu, top_guid %llu, " in vdev_validate()
2475 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_validate()
2478 vdev_dbgmsg(vd, "vdev_validate: '%s' missing from label", in vdev_validate()
2492 vdev_dbgmsg(vd, "vdev_validate: invalid pool state (%llu) " in vdev_validate()
2502 if (vd->vdev_not_present) in vdev_validate()
2503 vd->vdev_not_present = 0; in vdev_validate()
2628 vdev_t *vd = vdev_lookup_by_guid(stvd, dvd->vdev_guid); in vdev_copy_path_search() local
2630 if (vd == NULL || vd->vdev_ops != dvd->vdev_ops) in vdev_copy_path_search()
2633 ASSERT(vd->vdev_ops->vdev_op_leaf); in vdev_copy_path_search()
2635 vdev_copy_path_impl(vd, dvd); in vdev_copy_path_search()
2661 vdev_close(vdev_t *vd) in vdev_close() argument
2663 vdev_t *pvd = vd->vdev_parent; in vdev_close()
2664 spa_t *spa __maybe_unused = vd->vdev_spa; in vdev_close()
2666 ASSERT(vd != NULL); in vdev_close()
2667 ASSERT(vd->vdev_open_thread == curthread || in vdev_close()
2675 vd->vdev_reopening = (pvd->vdev_reopening && !vd->vdev_offline); in vdev_close()
2677 vd->vdev_ops->vdev_op_close(vd); in vdev_close()
2684 vd->vdev_prevstate = vd->vdev_state; in vdev_close()
2686 if (vd->vdev_offline) in vdev_close()
2687 vd->vdev_state = VDEV_STATE_OFFLINE; in vdev_close()
2689 vd->vdev_state = VDEV_STATE_CLOSED; in vdev_close()
2690 vd->vdev_stat.vs_aux = VDEV_AUX_NONE; in vdev_close()
2694 vdev_hold(vdev_t *vd) in vdev_hold() argument
2696 spa_t *spa = vd->vdev_spa; in vdev_hold()
2702 for (int c = 0; c < vd->vdev_children; c++) in vdev_hold()
2703 vdev_hold(vd->vdev_child[c]); in vdev_hold()
2705 if (vd->vdev_ops->vdev_op_leaf && vd->vdev_ops->vdev_op_hold != NULL) in vdev_hold()
2706 vd->vdev_ops->vdev_op_hold(vd); in vdev_hold()
2710 vdev_rele(vdev_t *vd) in vdev_rele() argument
2712 ASSERT(spa_is_root(vd->vdev_spa)); in vdev_rele()
2713 for (int c = 0; c < vd->vdev_children; c++) in vdev_rele()
2714 vdev_rele(vd->vdev_child[c]); in vdev_rele()
2716 if (vd->vdev_ops->vdev_op_leaf && vd->vdev_ops->vdev_op_rele != NULL) in vdev_rele()
2717 vd->vdev_ops->vdev_op_rele(vd); in vdev_rele()
2727 vdev_reopen(vdev_t *vd) in vdev_reopen() argument
2729 spa_t *spa = vd->vdev_spa; in vdev_reopen()
2734 vd->vdev_reopening = !vd->vdev_offline; in vdev_reopen()
2735 vdev_close(vd); in vdev_reopen()
2736 (void) vdev_open(vd); in vdev_reopen()
2743 if (vd->vdev_aux) { in vdev_reopen()
2744 (void) vdev_validate_aux(vd); in vdev_reopen()
2745 if (vdev_readable(vd) && vdev_writeable(vd) && in vdev_reopen()
2746 vd->vdev_aux == &spa->spa_l2cache) { in vdev_reopen()
2752 if (l2arc_vdev_present(vd)) { in vdev_reopen()
2753 l2arc_rebuild_vdev(vd, B_TRUE); in vdev_reopen()
2755 l2arc_add_vdev(spa, vd); in vdev_reopen()
2761 (void) vdev_validate(vd); in vdev_reopen()
2778 vdev_propagate_state(vd); in vdev_reopen()
2782 vdev_create(vdev_t *vd, uint64_t txg, boolean_t isreplacing) in vdev_create() argument
2791 error = vdev_open(vd); in vdev_create()
2793 if (error || vd->vdev_state != VDEV_STATE_HEALTHY) { in vdev_create()
2794 vdev_close(vd); in vdev_create()
2801 if ((error = vdev_dtl_load(vd)) != 0 || in vdev_create()
2802 (error = vdev_label_init(vd, txg, isreplacing ? in vdev_create()
2804 vdev_close(vd); in vdev_create()
2812 vdev_metaslab_set_size(vdev_t *vd) in vdev_metaslab_set_size() argument
2814 uint64_t asize = vd->vdev_asize; in vdev_metaslab_set_size()
2878 vd->vdev_ms_shift = ms_shift; in vdev_metaslab_set_size()
2879 ASSERT3U(vd->vdev_ms_shift, >=, SPA_MAXBLOCKSHIFT); in vdev_metaslab_set_size()
2883 vdev_dirty(vdev_t *vd, int flags, void *arg, uint64_t txg) in vdev_dirty() argument
2885 ASSERT(vd == vd->vdev_top); in vdev_dirty()
2887 ASSERT(vdev_is_concrete(vd) || flags == 0); in vdev_dirty()
2889 ASSERT(spa_writeable(vd->vdev_spa)); in vdev_dirty()
2892 (void) txg_list_add(&vd->vdev_ms_list, arg, txg); in vdev_dirty()
2895 (void) txg_list_add(&vd->vdev_dtl_list, arg, txg); in vdev_dirty()
2897 (void) txg_list_add(&vd->vdev_spa->spa_vdev_txg_list, vd, txg); in vdev_dirty()
2901 vdev_dirty_leaves(vdev_t *vd, int flags, uint64_t txg) in vdev_dirty_leaves() argument
2903 for (int c = 0; c < vd->vdev_children; c++) in vdev_dirty_leaves()
2904 vdev_dirty_leaves(vd->vdev_child[c], flags, txg); in vdev_dirty_leaves()
2906 if (vd->vdev_ops->vdev_op_leaf) in vdev_dirty_leaves()
2907 vdev_dirty(vd->vdev_top, flags, vd, txg); in vdev_dirty_leaves()
2949 vdev_dtl_dirty(vdev_t *vd, vdev_dtl_type_t t, uint64_t txg, uint64_t size) in vdev_dtl_dirty() argument
2951 range_tree_t *rt = vd->vdev_dtl[t]; in vdev_dtl_dirty()
2954 ASSERT(vd != vd->vdev_spa->spa_root_vdev); in vdev_dtl_dirty()
2955 ASSERT(spa_writeable(vd->vdev_spa)); in vdev_dtl_dirty()
2957 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_dirty()
2960 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_dirty()
2964 vdev_dtl_contains(vdev_t *vd, vdev_dtl_type_t t, uint64_t txg, uint64_t size) in vdev_dtl_contains() argument
2966 range_tree_t *rt = vd->vdev_dtl[t]; in vdev_dtl_contains()
2970 ASSERT(vd != vd->vdev_spa->spa_root_vdev); in vdev_dtl_contains()
2980 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_contains()
2983 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_contains()
2989 vdev_dtl_empty(vdev_t *vd, vdev_dtl_type_t t) in vdev_dtl_empty() argument
2991 range_tree_t *rt = vd->vdev_dtl[t]; in vdev_dtl_empty()
2994 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_empty()
2996 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_empty()
3006 vdev_default_need_resilver(vdev_t *vd, const dva_t *dva, size_t psize, in vdev_default_need_resilver() argument
3015 return (vdev_dtl_contains(vd, DTL_PARTIAL, phys_birth, 1)); in vdev_default_need_resilver()
3022 vdev_dtl_need_resilver(vdev_t *vd, const dva_t *dva, size_t psize, in vdev_dtl_need_resilver() argument
3025 ASSERT(vd != vd->vdev_spa->spa_root_vdev); in vdev_dtl_need_resilver()
3027 if (vd->vdev_ops->vdev_op_need_resilver == NULL || in vdev_dtl_need_resilver()
3028 vd->vdev_ops->vdev_op_leaf) in vdev_dtl_need_resilver()
3031 return (vd->vdev_ops->vdev_op_need_resilver(vd, dva, psize, in vdev_dtl_need_resilver()
3039 vdev_dtl_min(vdev_t *vd) in vdev_dtl_min() argument
3041 ASSERT(MUTEX_HELD(&vd->vdev_dtl_lock)); in vdev_dtl_min()
3042 ASSERT3U(range_tree_space(vd->vdev_dtl[DTL_MISSING]), !=, 0); in vdev_dtl_min()
3043 ASSERT0(vd->vdev_children); in vdev_dtl_min()
3045 return (range_tree_min(vd->vdev_dtl[DTL_MISSING]) - 1); in vdev_dtl_min()
3052 vdev_dtl_max(vdev_t *vd) in vdev_dtl_max() argument
3054 ASSERT(MUTEX_HELD(&vd->vdev_dtl_lock)); in vdev_dtl_max()
3055 ASSERT3U(range_tree_space(vd->vdev_dtl[DTL_MISSING]), !=, 0); in vdev_dtl_max()
3056 ASSERT0(vd->vdev_children); in vdev_dtl_max()
3058 return (range_tree_max(vd->vdev_dtl[DTL_MISSING])); in vdev_dtl_max()
3070 vdev_dtl_should_excise(vdev_t *vd, boolean_t rebuild_done) in vdev_dtl_should_excise() argument
3072 ASSERT0(vd->vdev_children); in vdev_dtl_should_excise()
3074 if (vd->vdev_state < VDEV_STATE_DEGRADED) in vdev_dtl_should_excise()
3077 if (vd->vdev_resilver_deferred) in vdev_dtl_should_excise()
3080 if (range_tree_is_empty(vd->vdev_dtl[DTL_MISSING])) in vdev_dtl_should_excise()
3084 vdev_rebuild_t *vr = &vd->vdev_top->vdev_rebuild_config; in vdev_dtl_should_excise()
3088 if (vd->vdev_rebuild_txg == 0) in vdev_dtl_should_excise()
3097 vdev_dtl_max(vd) <= vrp->vrp_max_txg) { in vdev_dtl_should_excise()
3098 ASSERT3U(vrp->vrp_min_txg, <=, vdev_dtl_min(vd)); in vdev_dtl_should_excise()
3099 ASSERT3U(vrp->vrp_min_txg, <, vd->vdev_rebuild_txg); in vdev_dtl_should_excise()
3100 ASSERT3U(vd->vdev_rebuild_txg, <=, vrp->vrp_max_txg); in vdev_dtl_should_excise()
3104 dsl_scan_t *scn = vd->vdev_spa->spa_dsl_pool->dp_scan; in vdev_dtl_should_excise()
3108 if (vd->vdev_resilver_txg == 0) in vdev_dtl_should_excise()
3118 if (vdev_dtl_max(vd) <= scn->scn_phys.scn_max_txg) { in vdev_dtl_should_excise()
3119 ASSERT3U(scnp->scn_min_txg, <=, vdev_dtl_min(vd)); in vdev_dtl_should_excise()
3120 ASSERT3U(scnp->scn_min_txg, <, vd->vdev_resilver_txg); in vdev_dtl_should_excise()
3121 ASSERT3U(vd->vdev_resilver_txg, <=, scnp->scn_max_txg); in vdev_dtl_should_excise()
3134 vdev_dtl_reassess(vdev_t *vd, uint64_t txg, uint64_t scrub_txg, in vdev_dtl_reassess() argument
3137 spa_t *spa = vd->vdev_spa; in vdev_dtl_reassess()
3143 for (int c = 0; c < vd->vdev_children; c++) in vdev_dtl_reassess()
3144 vdev_dtl_reassess(vd->vdev_child[c], txg, in vdev_dtl_reassess()
3147 if (vd == spa->spa_root_vdev || !vdev_is_concrete(vd) || vd->vdev_aux) in vdev_dtl_reassess()
3150 if (vd->vdev_ops->vdev_op_leaf) { in vdev_dtl_reassess()
3152 vdev_rebuild_t *vr = &vd->vdev_top->vdev_rebuild_config; in vdev_dtl_reassess()
3156 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_reassess()
3169 !range_tree_is_empty(vd->vdev_dtl[DTL_MISSING])) { in vdev_dtl_reassess()
3173 (u_longlong_t)vd->vdev_guid, (u_longlong_t)txg, in vdev_dtl_reassess()
3175 (u_longlong_t)vdev_dtl_min(vd), in vdev_dtl_reassess()
3176 (u_longlong_t)vdev_dtl_max(vd), in vdev_dtl_reassess()
3197 vdev_dtl_should_excise(vd, rebuild_done)) { in vdev_dtl_reassess()
3217 vd->vdev_dtl[DTL_MISSING], 1); in vdev_dtl_reassess()
3220 vd->vdev_dtl[DTL_SCRUB], 2); in vdev_dtl_reassess()
3222 vd->vdev_dtl[DTL_MISSING], 1); in vdev_dtl_reassess()
3225 if (!range_tree_is_empty(vd->vdev_dtl[DTL_MISSING])) { in vdev_dtl_reassess()
3227 (u_longlong_t)vdev_dtl_min(vd), in vdev_dtl_reassess()
3228 (u_longlong_t)vdev_dtl_max(vd)); in vdev_dtl_reassess()
3233 range_tree_vacate(vd->vdev_dtl[DTL_PARTIAL], NULL, NULL); in vdev_dtl_reassess()
3234 range_tree_walk(vd->vdev_dtl[DTL_MISSING], in vdev_dtl_reassess()
3235 range_tree_add, vd->vdev_dtl[DTL_PARTIAL]); in vdev_dtl_reassess()
3237 range_tree_vacate(vd->vdev_dtl[DTL_SCRUB], NULL, NULL); in vdev_dtl_reassess()
3238 range_tree_vacate(vd->vdev_dtl[DTL_OUTAGE], NULL, NULL); in vdev_dtl_reassess()
3239 if (!vdev_readable(vd)) in vdev_dtl_reassess()
3240 range_tree_add(vd->vdev_dtl[DTL_OUTAGE], 0, -1ULL); in vdev_dtl_reassess()
3242 range_tree_walk(vd->vdev_dtl[DTL_MISSING], in vdev_dtl_reassess()
3243 range_tree_add, vd->vdev_dtl[DTL_OUTAGE]); in vdev_dtl_reassess()
3251 range_tree_is_empty(vd->vdev_dtl[DTL_MISSING]) && in vdev_dtl_reassess()
3252 range_tree_is_empty(vd->vdev_dtl[DTL_OUTAGE])) { in vdev_dtl_reassess()
3253 if (vd->vdev_rebuild_txg != 0) { in vdev_dtl_reassess()
3254 vd->vdev_rebuild_txg = 0; in vdev_dtl_reassess()
3255 vdev_config_dirty(vd->vdev_top); in vdev_dtl_reassess()
3256 } else if (vd->vdev_resilver_txg != 0) { in vdev_dtl_reassess()
3257 vd->vdev_resilver_txg = 0; in vdev_dtl_reassess()
3258 vdev_config_dirty(vd->vdev_top); in vdev_dtl_reassess()
3262 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_reassess()
3265 vdev_dirty(vd->vdev_top, VDD_DTL, vd, txg); in vdev_dtl_reassess()
3267 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_reassess()
3278 } else if (vdev_get_nparity(vd) != 0) { in vdev_dtl_reassess()
3280 minref = vdev_get_nparity(vd) + 1; in vdev_dtl_reassess()
3283 minref = vd->vdev_children; in vdev_dtl_reassess()
3286 for (int c = 0; c < vd->vdev_children; c++) { in vdev_dtl_reassess()
3287 vdev_t *cvd = vd->vdev_child[c]; in vdev_dtl_reassess()
3294 vd->vdev_dtl[t], minref); in vdev_dtl_reassess()
3297 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_reassess()
3300 if (vd->vdev_top->vdev_ops == &vdev_raidz_ops) { in vdev_dtl_reassess()
3301 raidz_dtl_reassessed(vd); in vdev_dtl_reassess()
3309 vdev_post_kobj_evt(vdev_t *vd) in vdev_post_kobj_evt() argument
3311 if (vd->vdev_ops->vdev_op_kobj_evt_post && in vdev_post_kobj_evt()
3312 vd->vdev_kobj_flag == B_FALSE) { in vdev_post_kobj_evt()
3313 vd->vdev_kobj_flag = B_TRUE; in vdev_post_kobj_evt()
3314 vd->vdev_ops->vdev_op_kobj_evt_post(vd); in vdev_post_kobj_evt()
3317 for (int c = 0; c < vd->vdev_children; c++) in vdev_post_kobj_evt()
3318 vdev_post_kobj_evt(vd->vdev_child[c]); in vdev_post_kobj_evt()
3325 vdev_clear_kobj_evt(vdev_t *vd) in vdev_clear_kobj_evt() argument
3327 vd->vdev_kobj_flag = B_FALSE; in vdev_clear_kobj_evt()
3329 for (int c = 0; c < vd->vdev_children; c++) in vdev_clear_kobj_evt()
3330 vdev_clear_kobj_evt(vd->vdev_child[c]); in vdev_clear_kobj_evt()
3334 vdev_dtl_load(vdev_t *vd) in vdev_dtl_load() argument
3336 spa_t *spa = vd->vdev_spa; in vdev_dtl_load()
3341 if (vd->vdev_ops->vdev_op_leaf && vd->vdev_dtl_object != 0) { in vdev_dtl_load()
3342 ASSERT(vdev_is_concrete(vd)); in vdev_dtl_load()
3350 error = space_map_open(&vd->vdev_dtl_sm, mos, in vdev_dtl_load()
3351 vd->vdev_dtl_object, 0, -1ULL, 0); in vdev_dtl_load()
3354 ASSERT(vd->vdev_dtl_sm != NULL); in vdev_dtl_load()
3357 error = space_map_load(vd->vdev_dtl_sm, rt, SM_ALLOC); in vdev_dtl_load()
3359 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_load()
3361 vd->vdev_dtl[DTL_MISSING]); in vdev_dtl_load()
3362 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_load()
3371 for (int c = 0; c < vd->vdev_children; c++) { in vdev_dtl_load()
3372 error = vdev_dtl_load(vd->vdev_child[c]); in vdev_dtl_load()
3381 vdev_zap_allocation_data(vdev_t *vd, dmu_tx_t *tx) in vdev_zap_allocation_data() argument
3383 spa_t *spa = vd->vdev_spa; in vdev_zap_allocation_data()
3385 vdev_alloc_bias_t alloc_bias = vd->vdev_alloc_bias; in vdev_zap_allocation_data()
3396 VERIFY0(zap_add(mos, vd->vdev_top_zap, VDEV_TOP_ZAP_ALLOCATION_BIAS, in vdev_zap_allocation_data()
3405 vdev_destroy_unlink_zap(vdev_t *vd, uint64_t zapobj, dmu_tx_t *tx) in vdev_destroy_unlink_zap() argument
3407 spa_t *spa = vd->vdev_spa; in vdev_destroy_unlink_zap()
3415 vdev_create_link_zap(vdev_t *vd, dmu_tx_t *tx) in vdev_create_link_zap() argument
3417 spa_t *spa = vd->vdev_spa; in vdev_create_link_zap()
3429 vdev_construct_zaps(vdev_t *vd, dmu_tx_t *tx) in vdev_construct_zaps() argument
3431 if (vd->vdev_ops != &vdev_hole_ops && in vdev_construct_zaps()
3432 vd->vdev_ops != &vdev_missing_ops && in vdev_construct_zaps()
3433 vd->vdev_ops != &vdev_root_ops && in vdev_construct_zaps()
3434 !vd->vdev_top->vdev_removing) { in vdev_construct_zaps()
3435 if (vd->vdev_ops->vdev_op_leaf && vd->vdev_leaf_zap == 0) { in vdev_construct_zaps()
3436 vd->vdev_leaf_zap = vdev_create_link_zap(vd, tx); in vdev_construct_zaps()
3438 if (vd == vd->vdev_top && vd->vdev_top_zap == 0) { in vdev_construct_zaps()
3439 vd->vdev_top_zap = vdev_create_link_zap(vd, tx); in vdev_construct_zaps()
3440 if (vd->vdev_alloc_bias != VDEV_BIAS_NONE) in vdev_construct_zaps()
3441 vdev_zap_allocation_data(vd, tx); in vdev_construct_zaps()
3444 if (vd->vdev_ops == &vdev_root_ops && vd->vdev_root_zap == 0 && in vdev_construct_zaps()
3445 spa_feature_is_enabled(vd->vdev_spa, SPA_FEATURE_AVZ_V2)) { in vdev_construct_zaps()
3446 if (!spa_feature_is_active(vd->vdev_spa, SPA_FEATURE_AVZ_V2)) in vdev_construct_zaps()
3447 spa_feature_incr(vd->vdev_spa, SPA_FEATURE_AVZ_V2, tx); in vdev_construct_zaps()
3448 vd->vdev_root_zap = vdev_create_link_zap(vd, tx); in vdev_construct_zaps()
3451 for (uint64_t i = 0; i < vd->vdev_children; i++) { in vdev_construct_zaps()
3452 vdev_construct_zaps(vd->vdev_child[i], tx); in vdev_construct_zaps()
3457 vdev_dtl_sync(vdev_t *vd, uint64_t txg) in vdev_dtl_sync() argument
3459 spa_t *spa = vd->vdev_spa; in vdev_dtl_sync()
3460 range_tree_t *rt = vd->vdev_dtl[DTL_MISSING]; in vdev_dtl_sync()
3464 uint64_t object = space_map_object(vd->vdev_dtl_sm); in vdev_dtl_sync()
3466 ASSERT(vdev_is_concrete(vd)); in vdev_dtl_sync()
3467 ASSERT(vd->vdev_ops->vdev_op_leaf); in vdev_dtl_sync()
3471 if (vd->vdev_detached || vd->vdev_top->vdev_removing) { in vdev_dtl_sync()
3472 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_sync()
3473 space_map_free(vd->vdev_dtl_sm, tx); in vdev_dtl_sync()
3474 space_map_close(vd->vdev_dtl_sm); in vdev_dtl_sync()
3475 vd->vdev_dtl_sm = NULL; in vdev_dtl_sync()
3476 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_sync()
3483 if (vd->vdev_leaf_zap != 0 && (vd->vdev_detached || in vdev_dtl_sync()
3484 vd->vdev_top->vdev_islog)) { in vdev_dtl_sync()
3485 vdev_destroy_unlink_zap(vd, vd->vdev_leaf_zap, tx); in vdev_dtl_sync()
3486 vd->vdev_leaf_zap = 0; in vdev_dtl_sync()
3493 if (vd->vdev_dtl_sm == NULL) { in vdev_dtl_sync()
3499 VERIFY0(space_map_open(&vd->vdev_dtl_sm, mos, new_object, in vdev_dtl_sync()
3501 ASSERT(vd->vdev_dtl_sm != NULL); in vdev_dtl_sync()
3506 mutex_enter(&vd->vdev_dtl_lock); in vdev_dtl_sync()
3508 mutex_exit(&vd->vdev_dtl_lock); in vdev_dtl_sync()
3510 space_map_truncate(vd->vdev_dtl_sm, zfs_vdev_dtl_sm_blksz, tx); in vdev_dtl_sync()
3511 space_map_write(vd->vdev_dtl_sm, rtsync, SM_ALLOC, SM_NO_VDEVID, tx); in vdev_dtl_sync()
3520 if (object != space_map_object(vd->vdev_dtl_sm)) { in vdev_dtl_sync()
3521 vdev_dbgmsg(vd, "txg %llu, spa %s, DTL old object %llu, " in vdev_dtl_sync()
3524 (u_longlong_t)space_map_object(vd->vdev_dtl_sm)); in vdev_dtl_sync()
3525 vdev_config_dirty(vd->vdev_top); in vdev_dtl_sync()
3536 vdev_dtl_required(vdev_t *vd) in vdev_dtl_required() argument
3538 spa_t *spa = vd->vdev_spa; in vdev_dtl_required()
3539 vdev_t *tvd = vd->vdev_top; in vdev_dtl_required()
3540 uint8_t cant_read = vd->vdev_cant_read; in vdev_dtl_required()
3545 if (vd == spa->spa_root_vdev || vd == tvd) in vdev_dtl_required()
3553 vd->vdev_cant_read = B_TRUE; in vdev_dtl_required()
3556 vd->vdev_cant_read = cant_read; in vdev_dtl_required()
3560 required = !!zio_handle_device_injection(vd, NULL, in vdev_dtl_required()
3571 vdev_resilver_needed(vdev_t *vd, uint64_t *minp, uint64_t *maxp) in vdev_resilver_needed() argument
3577 if (vd->vdev_children == 0) { in vdev_resilver_needed()
3578 mutex_enter(&vd->vdev_dtl_lock); in vdev_resilver_needed()
3579 if (!range_tree_is_empty(vd->vdev_dtl[DTL_MISSING]) && in vdev_resilver_needed()
3580 vdev_writeable(vd)) { in vdev_resilver_needed()
3582 thismin = vdev_dtl_min(vd); in vdev_resilver_needed()
3583 thismax = vdev_dtl_max(vd); in vdev_resilver_needed()
3586 mutex_exit(&vd->vdev_dtl_lock); in vdev_resilver_needed()
3588 for (int c = 0; c < vd->vdev_children; c++) { in vdev_resilver_needed()
3589 vdev_t *cvd = vd->vdev_child[c]; in vdev_resilver_needed()
3613 vdev_checkpoint_sm_object(vdev_t *vd, uint64_t *sm_obj) in vdev_checkpoint_sm_object() argument
3615 ASSERT0(spa_config_held(vd->vdev_spa, SCL_ALL, RW_WRITER)); in vdev_checkpoint_sm_object()
3617 if (vd->vdev_top_zap == 0) { in vdev_checkpoint_sm_object()
3622 int error = zap_lookup(spa_meta_objset(vd->vdev_spa), vd->vdev_top_zap, in vdev_checkpoint_sm_object()
3633 vdev_load(vdev_t *vd) in vdev_load() argument
3635 int children = vd->vdev_children; in vdev_load()
3644 if (vd->vdev_ops == &vdev_root_ops && vd->vdev_children > 0) { in vdev_load()
3652 for (int c = 0; c < vd->vdev_children; c++) { in vdev_load()
3653 vdev_t *cvd = vd->vdev_child[c]; in vdev_load()
3668 for (int c = 0; c < vd->vdev_children; c++) { in vdev_load()
3669 int error = vd->vdev_child[c]->vdev_load_error; in vdev_load()
3675 vdev_set_deflate_ratio(vd); in vdev_load()
3677 if (vd->vdev_ops == &vdev_raidz_ops) { in vdev_load()
3678 error = vdev_raidz_load(vd); in vdev_load()
3686 if (vd == vd->vdev_top && vd->vdev_top_zap != 0) { in vdev_load()
3687 spa_t *spa = vd->vdev_spa; in vdev_load()
3690 error = zap_lookup(spa->spa_meta_objset, vd->vdev_top_zap, in vdev_load()
3694 ASSERT(vd->vdev_alloc_bias == VDEV_BIAS_NONE); in vdev_load()
3695 vd->vdev_alloc_bias = vdev_derive_alloc_bias(bias_str); in vdev_load()
3697 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_load()
3699 vdev_dbgmsg(vd, "vdev_load: zap_lookup(top_zap=%llu) " in vdev_load()
3701 (u_longlong_t)vd->vdev_top_zap, error); in vdev_load()
3706 if (vd == vd->vdev_top && vd->vdev_top_zap != 0) { in vdev_load()
3707 spa_t *spa = vd->vdev_spa; in vdev_load()
3710 error = zap_lookup(spa->spa_meta_objset, vd->vdev_top_zap, in vdev_load()
3714 vd->vdev_failfast = failfast & 1; in vdev_load()
3716 vd->vdev_failfast = vdev_prop_default_numeric( in vdev_load()
3719 vdev_dbgmsg(vd, in vdev_load()
3722 (u_longlong_t)vd->vdev_top_zap, error); in vdev_load()
3729 if (vd == vd->vdev_top && vd->vdev_top_zap != 0) { in vdev_load()
3730 error = vdev_rebuild_load(vd); in vdev_load()
3732 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_load()
3734 vdev_dbgmsg(vd, "vdev_load: vdev_rebuild_load " in vdev_load()
3740 if (vd->vdev_top_zap != 0 || vd->vdev_leaf_zap != 0) { in vdev_load()
3743 if (vd->vdev_top_zap != 0) in vdev_load()
3744 zapobj = vd->vdev_top_zap; in vdev_load()
3746 zapobj = vd->vdev_leaf_zap; in vdev_load()
3748 error = vdev_prop_get_int(vd, VDEV_PROP_CHECKSUM_N, in vdev_load()
3749 &vd->vdev_checksum_n); in vdev_load()
3751 vdev_dbgmsg(vd, "vdev_load: zap_lookup(zap=%llu) " in vdev_load()
3754 error = vdev_prop_get_int(vd, VDEV_PROP_CHECKSUM_T, in vdev_load()
3755 &vd->vdev_checksum_t); in vdev_load()
3757 vdev_dbgmsg(vd, "vdev_load: zap_lookup(zap=%llu) " in vdev_load()
3760 error = vdev_prop_get_int(vd, VDEV_PROP_IO_N, in vdev_load()
3761 &vd->vdev_io_n); in vdev_load()
3763 vdev_dbgmsg(vd, "vdev_load: zap_lookup(zap=%llu) " in vdev_load()
3766 error = vdev_prop_get_int(vd, VDEV_PROP_IO_T, in vdev_load()
3767 &vd->vdev_io_t); in vdev_load()
3769 vdev_dbgmsg(vd, "vdev_load: zap_lookup(zap=%llu) " in vdev_load()
3772 error = vdev_prop_get_int(vd, VDEV_PROP_SLOW_IO_N, in vdev_load()
3773 &vd->vdev_slow_io_n); in vdev_load()
3775 vdev_dbgmsg(vd, "vdev_load: zap_lookup(zap=%llu) " in vdev_load()
3778 error = vdev_prop_get_int(vd, VDEV_PROP_SLOW_IO_T, in vdev_load()
3779 &vd->vdev_slow_io_t); in vdev_load()
3781 vdev_dbgmsg(vd, "vdev_load: zap_lookup(zap=%llu) " in vdev_load()
3788 if (vd == vd->vdev_top && vdev_is_concrete(vd)) { in vdev_load()
3789 vdev_metaslab_group_create(vd); in vdev_load()
3791 if (vd->vdev_ashift == 0 || vd->vdev_asize == 0) { in vdev_load()
3792 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_load()
3794 vdev_dbgmsg(vd, "vdev_load: invalid size. ashift=%llu, " in vdev_load()
3795 "asize=%llu", (u_longlong_t)vd->vdev_ashift, in vdev_load()
3796 (u_longlong_t)vd->vdev_asize); in vdev_load()
3800 error = vdev_metaslab_init(vd, 0); in vdev_load()
3802 vdev_dbgmsg(vd, "vdev_load: metaslab_init failed " in vdev_load()
3804 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_load()
3810 error = vdev_checkpoint_sm_object(vd, &checkpoint_sm_obj); in vdev_load()
3812 objset_t *mos = spa_meta_objset(vd->vdev_spa); in vdev_load()
3813 ASSERT(vd->vdev_asize != 0); in vdev_load()
3814 ASSERT3P(vd->vdev_checkpoint_sm, ==, NULL); in vdev_load()
3816 error = space_map_open(&vd->vdev_checkpoint_sm, in vdev_load()
3817 mos, checkpoint_sm_obj, 0, vd->vdev_asize, in vdev_load()
3818 vd->vdev_ashift); in vdev_load()
3820 vdev_dbgmsg(vd, "vdev_load: space_map_open " in vdev_load()
3826 ASSERT3P(vd->vdev_checkpoint_sm, !=, NULL); in vdev_load()
3834 vd->vdev_stat.vs_checkpoint_space = in vdev_load()
3835 -space_map_allocated(vd->vdev_checkpoint_sm); in vdev_load()
3836 vd->vdev_spa->spa_checkpoint_info.sci_dspace += in vdev_load()
3837 vd->vdev_stat.vs_checkpoint_space; in vdev_load()
3839 vdev_dbgmsg(vd, "vdev_load: failed to retrieve " in vdev_load()
3849 if (vd->vdev_ops->vdev_op_leaf && (error = vdev_dtl_load(vd)) != 0) { in vdev_load()
3850 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_load()
3852 vdev_dbgmsg(vd, "vdev_load: vdev_dtl_load failed " in vdev_load()
3858 error = vdev_obsolete_sm_object(vd, &obsolete_sm_object); in vdev_load()
3860 objset_t *mos = vd->vdev_spa->spa_meta_objset; in vdev_load()
3861 ASSERT(vd->vdev_asize != 0); in vdev_load()
3862 ASSERT3P(vd->vdev_obsolete_sm, ==, NULL); in vdev_load()
3864 if ((error = space_map_open(&vd->vdev_obsolete_sm, mos, in vdev_load()
3865 obsolete_sm_object, 0, vd->vdev_asize, 0))) { in vdev_load()
3866 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN, in vdev_load()
3868 vdev_dbgmsg(vd, "vdev_load: space_map_open failed for " in vdev_load()
3874 vdev_dbgmsg(vd, "vdev_load: failed to retrieve obsolete " in vdev_load()
3890 vdev_validate_aux(vdev_t *vd) in vdev_validate_aux() argument
3896 if (!vdev_readable(vd)) in vdev_validate_aux()
3899 if ((label = vdev_label_read_config(vd, -1ULL)) == NULL) { in vdev_validate_aux()
3900 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_validate_aux()
3908 guid != vd->vdev_guid || in vdev_validate_aux()
3910 vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, in vdev_validate_aux()
3925 vdev_destroy_ms_flush_data(vdev_t *vd, dmu_tx_t *tx) in vdev_destroy_ms_flush_data() argument
3927 objset_t *mos = spa_meta_objset(vd->vdev_spa); in vdev_destroy_ms_flush_data()
3929 if (vd->vdev_top_zap == 0) in vdev_destroy_ms_flush_data()
3933 int err = zap_lookup(mos, vd->vdev_top_zap, in vdev_destroy_ms_flush_data()
3940 VERIFY0(zap_remove(mos, vd->vdev_top_zap, in vdev_destroy_ms_flush_data()
3949 vdev_destroy_spacemaps(vdev_t *vd, dmu_tx_t *tx) in vdev_destroy_spacemaps() argument
3951 if (vd->vdev_ms_array == 0) in vdev_destroy_spacemaps()
3954 objset_t *mos = vd->vdev_spa->spa_meta_objset; in vdev_destroy_spacemaps()
3955 uint64_t array_count = vd->vdev_asize >> vd->vdev_ms_shift; in vdev_destroy_spacemaps()
3958 VERIFY0(dmu_read(mos, vd->vdev_ms_array, 0, in vdev_destroy_spacemaps()
3970 VERIFY0(dmu_object_free(mos, vd->vdev_ms_array, tx)); in vdev_destroy_spacemaps()
3971 vdev_destroy_ms_flush_data(vd, tx); in vdev_destroy_spacemaps()
3972 vd->vdev_ms_array = 0; in vdev_destroy_spacemaps()
3976 vdev_remove_empty_log(vdev_t *vd, uint64_t txg) in vdev_remove_empty_log() argument
3978 spa_t *spa = vd->vdev_spa; in vdev_remove_empty_log()
3980 ASSERT(vd->vdev_islog); in vdev_remove_empty_log()
3981 ASSERT(vd == vd->vdev_top); in vdev_remove_empty_log()
3986 vdev_destroy_spacemaps(vd, tx); in vdev_remove_empty_log()
3987 if (vd->vdev_top_zap != 0) { in vdev_remove_empty_log()
3988 vdev_destroy_unlink_zap(vd, vd->vdev_top_zap, tx); in vdev_remove_empty_log()
3989 vd->vdev_top_zap = 0; in vdev_remove_empty_log()
3996 vdev_sync_done(vdev_t *vd, uint64_t txg) in vdev_sync_done() argument
3999 boolean_t reassess = !txg_list_empty(&vd->vdev_ms_list, TXG_CLEAN(txg)); in vdev_sync_done()
4001 ASSERT(vdev_is_concrete(vd)); in vdev_sync_done()
4003 while ((msp = txg_list_remove(&vd->vdev_ms_list, TXG_CLEAN(txg))) in vdev_sync_done()
4008 metaslab_sync_reassess(vd->vdev_mg); in vdev_sync_done()
4009 if (vd->vdev_log_mg != NULL) in vdev_sync_done()
4010 metaslab_sync_reassess(vd->vdev_log_mg); in vdev_sync_done()
4015 vdev_sync(vdev_t *vd, uint64_t txg) in vdev_sync() argument
4017 spa_t *spa = vd->vdev_spa; in vdev_sync()
4023 if (range_tree_space(vd->vdev_obsolete_segments) > 0) { in vdev_sync()
4024 ASSERT(vd->vdev_removing || in vdev_sync()
4025 vd->vdev_ops == &vdev_indirect_ops); in vdev_sync()
4027 vdev_indirect_sync_obsolete(vd, tx); in vdev_sync()
4033 if (vd->vdev_ops == &vdev_indirect_ops) { in vdev_sync()
4034 ASSERT(txg_list_empty(&vd->vdev_ms_list, txg)); in vdev_sync()
4035 ASSERT(txg_list_empty(&vd->vdev_dtl_list, txg)); in vdev_sync()
4041 ASSERT(vdev_is_concrete(vd)); in vdev_sync()
4043 if (vd->vdev_ms_array == 0 && vd->vdev_ms_shift != 0 && in vdev_sync()
4044 !vd->vdev_removing) { in vdev_sync()
4045 ASSERT(vd == vd->vdev_top); in vdev_sync()
4046 ASSERT0(vd->vdev_indirect_config.vic_mapping_object); in vdev_sync()
4047 vd->vdev_ms_array = dmu_object_alloc(spa->spa_meta_objset, in vdev_sync()
4049 ASSERT(vd->vdev_ms_array != 0); in vdev_sync()
4050 vdev_config_dirty(vd); in vdev_sync()
4053 while ((msp = txg_list_remove(&vd->vdev_ms_list, txg)) != NULL) { in vdev_sync()
4055 (void) txg_list_add(&vd->vdev_ms_list, msp, TXG_CLEAN(txg)); in vdev_sync()
4058 while ((lvd = txg_list_remove(&vd->vdev_dtl_list, txg)) != NULL) in vdev_sync()
4065 if (vd->vdev_islog && vd->vdev_stat.vs_alloc == 0 && vd->vdev_removing) in vdev_sync()
4066 vdev_remove_empty_log(vd, txg); in vdev_sync()
4068 (void) txg_list_add(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg)); in vdev_sync()
4079 vdev_psize_to_asize_txg(vdev_t *vd, uint64_t psize, uint64_t txg) in vdev_psize_to_asize_txg() argument
4081 return (vd->vdev_ops->vdev_op_asize(vd, psize, txg)); in vdev_psize_to_asize_txg()
4085 vdev_psize_to_asize(vdev_t *vd, uint64_t psize) in vdev_psize_to_asize() argument
4087 return (vdev_psize_to_asize_txg(vd, psize, 0)); in vdev_psize_to_asize()
4097 vdev_t *vd, *tvd; in vdev_fault() local
4101 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) in vdev_fault()
4104 if (!vd->vdev_ops->vdev_op_leaf) in vdev_fault()
4107 tvd = vd->vdev_top; in vdev_fault()
4128 vd->vdev_stat.vs_aux = VDEV_AUX_EXTERNAL; in vdev_fault()
4129 vd->vdev_tmpoffline = B_FALSE; in vdev_fault()
4132 vd->vdev_tmpoffline = B_TRUE; in vdev_fault()
4140 vd->vdev_label_aux = aux; in vdev_fault()
4145 vd->vdev_delayed_close = B_FALSE; in vdev_fault()
4146 vd->vdev_faulted = 1ULL; in vdev_fault()
4147 vd->vdev_degraded = 0ULL; in vdev_fault()
4148 vdev_set_state(vd, B_FALSE, VDEV_STATE_FAULTED, aux); in vdev_fault()
4154 if (!tvd->vdev_islog && vd->vdev_aux == NULL && vdev_dtl_required(vd)) { in vdev_fault()
4155 vd->vdev_degraded = 1ULL; in vdev_fault()
4156 vd->vdev_faulted = 0ULL; in vdev_fault()
4164 if (vdev_readable(vd)) in vdev_fault()
4165 vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, aux); in vdev_fault()
4168 return (spa_vdev_state_exit(spa, vd, 0)); in vdev_fault()
4179 vdev_t *vd; in vdev_degrade() local
4183 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) in vdev_degrade()
4186 if (!vd->vdev_ops->vdev_op_leaf) in vdev_degrade()
4192 if (vd->vdev_faulted || vd->vdev_degraded) in vdev_degrade()
4195 vd->vdev_degraded = 1ULL; in vdev_degrade()
4196 if (!vdev_is_dead(vd)) in vdev_degrade()
4197 vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, in vdev_degrade()
4200 return (spa_vdev_state_exit(spa, vd, 0)); in vdev_degrade()
4206 vdev_t *vd; in vdev_remove_wanted() local
4210 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) in vdev_remove_wanted()
4217 if (vd->vdev_removed || vd->vdev_expanding) in vdev_remove_wanted()
4223 if (vd->vdev_ops->vdev_op_leaf && !zio_wait(vdev_probe(vd, NULL))) in vdev_remove_wanted()
4226 vd->vdev_remove_wanted = B_TRUE; in vdev_remove_wanted()
4229 return (spa_vdev_state_exit(spa, vd, 0)); in vdev_remove_wanted()
4244 vdev_t *vd, *tvd, *pvd, *rvd = spa->spa_root_vdev; in vdev_online() local
4250 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) in vdev_online()
4253 wasoffline = (vd->vdev_offline || vd->vdev_tmpoffline); in vdev_online()
4254 oldstate = vd->vdev_state; in vdev_online()
4256 tvd = vd->vdev_top; in vdev_online()
4257 vd->vdev_offline = B_FALSE; in vdev_online()
4258 vd->vdev_tmpoffline = B_FALSE; in vdev_online()
4259 vd->vdev_checkremove = !!(flags & ZFS_ONLINE_CHECKREMOVE); in vdev_online()
4260 vd->vdev_forcefault = !!(flags & ZFS_ONLINE_FORCEFAULT); in vdev_online()
4263 if (!vd->vdev_aux) { in vdev_online()
4264 for (pvd = vd; pvd != rvd; pvd = pvd->vdev_parent) in vdev_online()
4267 vd->vdev_expansion_time = gethrestime_sec(); in vdev_online()
4271 vd->vdev_checkremove = vd->vdev_forcefault = B_FALSE; in vdev_online()
4273 if (!vd->vdev_aux) { in vdev_online()
4274 for (pvd = vd; pvd != rvd; pvd = pvd->vdev_parent) in vdev_online()
4279 *newstate = vd->vdev_state; in vdev_online()
4281 !vdev_is_dead(vd) && vd->vdev_parent && in vdev_online()
4282 vd->vdev_parent->vdev_ops == &vdev_spare_ops && in vdev_online()
4283 vd->vdev_parent->vdev_child[0] == vd) in vdev_online()
4284 vd->vdev_unspare = B_TRUE; in vdev_online()
4289 if (vd->vdev_aux) in vdev_online()
4290 return (spa_vdev_state_exit(spa, vd, ENOTSUP)); in vdev_online()
4296 mutex_enter(&vd->vdev_initialize_lock); in vdev_online()
4297 if (vdev_writeable(vd) && in vdev_online()
4298 vd->vdev_initialize_thread == NULL && in vdev_online()
4299 vd->vdev_initialize_state == VDEV_INITIALIZE_ACTIVE) { in vdev_online()
4300 (void) vdev_initialize(vd); in vdev_online()
4302 mutex_exit(&vd->vdev_initialize_lock); in vdev_online()
4310 mutex_enter(&vd->vdev_trim_lock); in vdev_online()
4311 if (vdev_writeable(vd) && !vd->vdev_isl2cache && in vdev_online()
4312 vd->vdev_trim_thread == NULL && in vdev_online()
4313 vd->vdev_trim_state == VDEV_TRIM_ACTIVE) { in vdev_online()
4314 (void) vdev_trim(vd, vd->vdev_trim_rate, vd->vdev_trim_partial, in vdev_online()
4315 vd->vdev_trim_secure); in vdev_online()
4317 mutex_exit(&vd->vdev_trim_lock); in vdev_online()
4321 vd->vdev_state >= VDEV_STATE_DEGRADED)) { in vdev_online()
4322 spa_event_notify(spa, vd, NULL, ESC_ZFS_VDEV_ONLINE); in vdev_online()
4328 if (vd->vdev_unspare && in vdev_online()
4334 return (spa_vdev_state_exit(spa, vd, 0)); in vdev_online()
4340 vdev_t *vd, *tvd; in vdev_offline_locked() local
4348 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) in vdev_offline_locked()
4351 if (!vd->vdev_ops->vdev_op_leaf) in vdev_offline_locked()
4354 if (vd->vdev_ops == &vdev_draid_spare_ops) in vdev_offline_locked()
4357 tvd = vd->vdev_top; in vdev_offline_locked()
4364 if (!vd->vdev_offline) { in vdev_offline_locked()
4370 if (!tvd->vdev_islog && vd->vdev_aux == NULL && in vdev_offline_locked()
4371 vdev_dtl_required(vd)) in vdev_offline_locked()
4387 (void) spa_vdev_state_exit(spa, vd, 0); in vdev_offline_locked()
4411 vd, error)); in vdev_offline_locked()
4412 (void) spa_vdev_state_exit(spa, vd, 0); in vdev_offline_locked()
4424 vd->vdev_offline = B_TRUE; in vdev_offline_locked()
4427 if (!tvd->vdev_islog && vd->vdev_aux == NULL && in vdev_offline_locked()
4429 vd->vdev_offline = B_FALSE; in vdev_offline_locked()
4443 vd->vdev_tmpoffline = !!(flags & ZFS_OFFLINE_TEMPORARY); in vdev_offline_locked()
4445 return (spa_vdev_state_exit(spa, vd, 0)); in vdev_offline_locked()
4466 vdev_clear(spa_t *spa, vdev_t *vd) in vdev_clear() argument
4472 if (vd == NULL) in vdev_clear()
4473 vd = rvd; in vdev_clear()
4475 vd->vdev_stat.vs_read_errors = 0; in vdev_clear()
4476 vd->vdev_stat.vs_write_errors = 0; in vdev_clear()
4477 vd->vdev_stat.vs_checksum_errors = 0; in vdev_clear()
4478 vd->vdev_stat.vs_slow_ios = 0; in vdev_clear()
4480 for (int c = 0; c < vd->vdev_children; c++) in vdev_clear()
4481 vdev_clear(spa, vd->vdev_child[c]); in vdev_clear()
4486 if (!vdev_is_concrete(vd) || vd->vdev_removed) in vdev_clear()
4495 if (vd->vdev_faulted || vd->vdev_degraded || in vdev_clear()
4496 !vdev_readable(vd) || !vdev_writeable(vd)) { in vdev_clear()
4502 vd->vdev_forcefault = B_TRUE; in vdev_clear()
4504 vd->vdev_faulted = vd->vdev_degraded = 0ULL; in vdev_clear()
4505 vd->vdev_cant_read = B_FALSE; in vdev_clear()
4506 vd->vdev_cant_write = B_FALSE; in vdev_clear()
4507 vd->vdev_stat.vs_aux = 0; in vdev_clear()
4509 vdev_reopen(vd == rvd ? rvd : vd->vdev_top); in vdev_clear()
4511 vd->vdev_forcefault = B_FALSE; in vdev_clear()
4513 if (vd != rvd && vdev_writeable(vd->vdev_top)) in vdev_clear()
4514 vdev_state_dirty(vd->vdev_top); in vdev_clear()
4517 if (vd->vdev_aux == NULL && !vdev_is_dead(vd) && in vdev_clear()
4522 spa_event_notify(spa, vd, NULL, ESC_ZFS_VDEV_CLEAR); in vdev_clear()
4530 if (!vdev_is_dead(vd) && vd->vdev_parent != NULL && in vdev_clear()
4531 vd->vdev_parent->vdev_ops == &vdev_spare_ops && in vdev_clear()
4532 vd->vdev_parent->vdev_child[0] == vd) in vdev_clear()
4533 vd->vdev_unspare = B_TRUE; in vdev_clear()
4536 zfs_ereport_clear(spa, vd); in vdev_clear()
4540 vdev_is_dead(vdev_t *vd) in vdev_is_dead() argument
4549 return (vd->vdev_state < VDEV_STATE_DEGRADED || in vdev_is_dead()
4550 vd->vdev_ops == &vdev_hole_ops || in vdev_is_dead()
4551 vd->vdev_ops == &vdev_missing_ops); in vdev_is_dead()
4555 vdev_readable(vdev_t *vd) in vdev_readable() argument
4557 return (!vdev_is_dead(vd) && !vd->vdev_cant_read); in vdev_readable()
4561 vdev_writeable(vdev_t *vd) in vdev_writeable() argument
4563 return (!vdev_is_dead(vd) && !vd->vdev_cant_write && in vdev_writeable()
4564 vdev_is_concrete(vd)); in vdev_writeable()
4568 vdev_allocatable(vdev_t *vd) in vdev_allocatable() argument
4570 uint64_t state = vd->vdev_state; in vdev_allocatable()
4581 !vd->vdev_cant_write && vdev_is_concrete(vd) && in vdev_allocatable()
4582 vd->vdev_mg->mg_initialized); in vdev_allocatable()
4586 vdev_accessible(vdev_t *vd, zio_t *zio) in vdev_accessible() argument
4588 ASSERT(zio->io_vd == vd); in vdev_accessible()
4590 if (vdev_is_dead(vd) || vd->vdev_remove_wanted) in vdev_accessible()
4594 return (!vd->vdev_cant_read); in vdev_accessible()
4597 return (!vd->vdev_cant_write); in vdev_accessible()
4657 vdev_is_spacemap_addressable(vdev_t *vd) in vdev_is_spacemap_addressable() argument
4659 if (spa_feature_is_active(vd->vdev_spa, SPA_FEATURE_SPACEMAP_V2)) in vdev_is_spacemap_addressable()
4669 uint64_t shift = vd->vdev_ashift + SM_OFFSET_BITS; in vdev_is_spacemap_addressable()
4674 return (vd->vdev_asize < (1ULL << shift)); in vdev_is_spacemap_addressable()
4681 vdev_get_stats_ex_impl(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx) in vdev_get_stats_ex_impl() argument
4688 if (!vd->vdev_ops->vdev_op_leaf) { in vdev_get_stats_ex_impl()
4696 for (int c = 0; c < vd->vdev_children; c++) { in vdev_get_stats_ex_impl()
4697 vdev_t *cvd = vd->vdev_child[c]; in vdev_get_stats_ex_impl()
4715 memcpy(vsx, &vd->vdev_stat_ex, sizeof (vd->vdev_stat_ex)); in vdev_get_stats_ex_impl()
4718 vsx->vsx_active_queue[t] = vd->vdev_queue.vq_cactive[t]; in vdev_get_stats_ex_impl()
4719 vsx->vsx_pend_queue[t] = vdev_queue_class_length(vd, t); in vdev_get_stats_ex_impl()
4725 vdev_get_stats_ex(vdev_t *vd, vdev_stat_t *vs, vdev_stat_ex_t *vsx) in vdev_get_stats_ex() argument
4727 vdev_t *tvd = vd->vdev_top; in vdev_get_stats_ex()
4728 mutex_enter(&vd->vdev_stat_lock); in vdev_get_stats_ex()
4730 memcpy(vs, &vd->vdev_stat, sizeof (*vs)); in vdev_get_stats_ex()
4732 vs->vs_state = vd->vdev_state; in vdev_get_stats_ex()
4733 vs->vs_rsize = vdev_get_min_asize(vd); in vdev_get_stats_ex()
4735 if (vd->vdev_ops->vdev_op_leaf) { in vdev_get_stats_ex()
4736 vs->vs_pspace = vd->vdev_psize; in vdev_get_stats_ex()
4745 vd->vdev_initialize_bytes_done; in vdev_get_stats_ex()
4747 vd->vdev_initialize_bytes_est; in vdev_get_stats_ex()
4748 vs->vs_initialize_state = vd->vdev_initialize_state; in vdev_get_stats_ex()
4750 vd->vdev_initialize_action_time; in vdev_get_stats_ex()
4757 vs->vs_trim_notsup = !vd->vdev_has_trim; in vdev_get_stats_ex()
4758 vs->vs_trim_bytes_done = vd->vdev_trim_bytes_done; in vdev_get_stats_ex()
4759 vs->vs_trim_bytes_est = vd->vdev_trim_bytes_est; in vdev_get_stats_ex()
4760 vs->vs_trim_state = vd->vdev_trim_state; in vdev_get_stats_ex()
4761 vs->vs_trim_action_time = vd->vdev_trim_action_time; in vdev_get_stats_ex()
4764 vs->vs_resilver_deferred = vd->vdev_resilver_deferred; in vdev_get_stats_ex()
4773 if (vd->vdev_aux == NULL && tvd != NULL) { in vdev_get_stats_ex()
4775 vd->vdev_max_asize - vd->vdev_asize, in vdev_get_stats_ex()
4779 vs->vs_configured_ashift = vd->vdev_top != NULL in vdev_get_stats_ex()
4780 ? vd->vdev_top->vdev_ashift : vd->vdev_ashift; in vdev_get_stats_ex()
4781 vs->vs_logical_ashift = vd->vdev_logical_ashift; in vdev_get_stats_ex()
4782 if (vd->vdev_physical_ashift <= ASHIFT_MAX) in vdev_get_stats_ex()
4783 vs->vs_physical_ashift = vd->vdev_physical_ashift; in vdev_get_stats_ex()
4791 if (vd->vdev_aux == NULL && vd == vd->vdev_top && in vdev_get_stats_ex()
4792 vdev_is_concrete(vd)) { in vdev_get_stats_ex()
4799 vs->vs_fragmentation = (vd->vdev_mg != NULL) ? in vdev_get_stats_ex()
4800 vd->vdev_mg->mg_fragmentation : 0; in vdev_get_stats_ex()
4802 vs->vs_noalloc = MAX(vd->vdev_noalloc, in vdev_get_stats_ex()
4806 vdev_get_stats_ex_impl(vd, vs, vsx); in vdev_get_stats_ex()
4807 mutex_exit(&vd->vdev_stat_lock); in vdev_get_stats_ex()
4811 vdev_get_stats(vdev_t *vd, vdev_stat_t *vs) in vdev_get_stats() argument
4813 return (vdev_get_stats_ex(vd, vs, NULL)); in vdev_get_stats()
4817 vdev_clear_stats(vdev_t *vd) in vdev_clear_stats() argument
4819 mutex_enter(&vd->vdev_stat_lock); in vdev_clear_stats()
4820 vd->vdev_stat.vs_space = 0; in vdev_clear_stats()
4821 vd->vdev_stat.vs_dspace = 0; in vdev_clear_stats()
4822 vd->vdev_stat.vs_alloc = 0; in vdev_clear_stats()
4823 mutex_exit(&vd->vdev_stat_lock); in vdev_clear_stats()
4827 vdev_scan_stat_init(vdev_t *vd) in vdev_scan_stat_init() argument
4829 vdev_stat_t *vs = &vd->vdev_stat; in vdev_scan_stat_init()
4831 for (int c = 0; c < vd->vdev_children; c++) in vdev_scan_stat_init()
4832 vdev_scan_stat_init(vd->vdev_child[c]); in vdev_scan_stat_init()
4834 mutex_enter(&vd->vdev_stat_lock); in vdev_scan_stat_init()
4836 mutex_exit(&vd->vdev_stat_lock); in vdev_scan_stat_init()
4844 vdev_t *vd = zio->io_vd ? zio->io_vd : rvd; in vdev_stat_update() local
4849 vdev_stat_t *vs = vd ? &vd->vdev_stat : NULL; in vdev_stat_update()
4850 vdev_stat_ex_t *vsx = vd ? &vd->vdev_stat_ex : NULL; in vdev_stat_update()
4852 vdev_stat_t *vs = &vd->vdev_stat; in vdev_stat_update()
4853 vdev_stat_ex_t *vsx = &vd->vdev_stat_ex; in vdev_stat_update()
4879 if (vd == rvd) in vdev_stat_update()
4882 ASSERT(vd == zio->io_vd); in vdev_stat_update()
4887 mutex_enter(&vd->vdev_stat_lock); in vdev_stat_update()
4899 if (vd->vdev_ops->vdev_op_leaf) in vdev_stat_update()
4911 vdev_t *tvd = vd->vdev_top; in vdev_stat_update()
4916 if (vd->vdev_ops->vdev_op_leaf && in vdev_stat_update()
4917 vd->vdev_ops != &vdev_draid_spare_ops) { in vdev_stat_update()
4931 if (vd->vdev_ops->vdev_op_leaf && in vdev_stat_update()
4987 mutex_exit(&vd->vdev_stat_lock); in vdev_stat_update()
5031 if (vd->vdev_ops->vdev_op_leaf) { in vdev_stat_update()
5036 vdev_dtl_dirty(vd, DTL_SCRUB, txg, 1); in vdev_stat_update()
5043 if (vdev_dtl_contains(vd, DTL_MISSING, txg, 1)) in vdev_stat_update()
5045 for (pvd = vd; pvd != rvd; pvd = pvd->vdev_parent) in vdev_stat_update()
5047 vdev_dirty(vd->vdev_top, VDD_DTL, vd, commit_txg); in vdev_stat_update()
5049 if (vd != rvd) in vdev_stat_update()
5050 vdev_dtl_dirty(vd, DTL_MISSING, txg, 1); in vdev_stat_update()
5055 vdev_deflated_space(vdev_t *vd, int64_t space) in vdev_deflated_space() argument
5058 ASSERT(vd->vdev_deflate_ratio != 0 || vd->vdev_isl2cache); in vdev_deflated_space()
5060 return ((space >> SPA_MINBLOCKSHIFT) * vd->vdev_deflate_ratio); in vdev_deflated_space()
5068 vdev_space_update(vdev_t *vd, int64_t alloc_delta, int64_t defer_delta, in vdev_space_update() argument
5073 spa_t *spa = vd->vdev_spa; in vdev_space_update()
5076 ASSERT(vd == vd->vdev_top); in vdev_space_update()
5084 dspace_delta = vdev_deflated_space(vd, space_delta); in vdev_space_update()
5086 mutex_enter(&vd->vdev_stat_lock); in vdev_space_update()
5089 ASSERT3U(vd->vdev_stat.vs_alloc, >=, -alloc_delta); in vdev_space_update()
5092 vd->vdev_stat.vs_alloc += alloc_delta; in vdev_space_update()
5093 vd->vdev_stat.vs_space += space_delta; in vdev_space_update()
5094 vd->vdev_stat.vs_dspace += dspace_delta; in vdev_space_update()
5095 mutex_exit(&vd->vdev_stat_lock); in vdev_space_update()
5098 if (vd->vdev_mg != NULL && !vd->vdev_islog) { in vdev_space_update()
5099 ASSERT(!vd->vdev_isl2cache); in vdev_space_update()
5115 vdev_config_dirty(vdev_t *vd) in vdev_config_dirty() argument
5117 spa_t *spa = vd->vdev_spa; in vdev_config_dirty()
5127 if (vd->vdev_aux != NULL) { in vdev_config_dirty()
5128 spa_aux_vdev_t *sav = vd->vdev_aux; in vdev_config_dirty()
5133 if (sav->sav_vdevs[c] == vd) in vdev_config_dirty()
5160 aux[c] = vdev_config_generate(spa, vd, B_TRUE, 0); in vdev_config_dirty()
5175 if (vd == rvd) { in vdev_config_dirty()
5179 ASSERT(vd == vd->vdev_top); in vdev_config_dirty()
5181 if (!list_link_active(&vd->vdev_config_dirty_node) && in vdev_config_dirty()
5182 vdev_is_concrete(vd)) { in vdev_config_dirty()
5183 list_insert_head(&spa->spa_config_dirty_list, vd); in vdev_config_dirty()
5189 vdev_config_clean(vdev_t *vd) in vdev_config_clean() argument
5191 spa_t *spa = vd->vdev_spa; in vdev_config_clean()
5197 ASSERT(list_link_active(&vd->vdev_config_dirty_node)); in vdev_config_clean()
5198 list_remove(&spa->spa_config_dirty_list, vd); in vdev_config_clean()
5208 vdev_state_dirty(vdev_t *vd) in vdev_state_dirty() argument
5210 spa_t *spa = vd->vdev_spa; in vdev_state_dirty()
5213 ASSERT(vd == vd->vdev_top); in vdev_state_dirty()
5225 if (!list_link_active(&vd->vdev_state_dirty_node) && in vdev_state_dirty()
5226 vdev_is_concrete(vd)) in vdev_state_dirty()
5227 list_insert_head(&spa->spa_state_dirty_list, vd); in vdev_state_dirty()
5231 vdev_state_clean(vdev_t *vd) in vdev_state_clean() argument
5233 spa_t *spa = vd->vdev_spa; in vdev_state_clean()
5239 ASSERT(list_link_active(&vd->vdev_state_dirty_node)); in vdev_state_clean()
5240 list_remove(&spa->spa_state_dirty_list, vd); in vdev_state_clean()
5247 vdev_propagate_state(vdev_t *vd) in vdev_propagate_state() argument
5249 spa_t *spa = vd->vdev_spa; in vdev_propagate_state()
5255 if (vd->vdev_children > 0) { in vdev_propagate_state()
5256 for (int c = 0; c < vd->vdev_children; c++) { in vdev_propagate_state()
5257 child = vd->vdev_child[c]; in vdev_propagate_state()
5273 if (child->vdev_islog && vd == rvd) in vdev_propagate_state()
5285 vd->vdev_ops->vdev_op_state_change(vd, faulted, degraded); in vdev_propagate_state()
5293 if (corrupted && vd == rvd && in vdev_propagate_state()
5299 if (vd->vdev_parent) in vdev_propagate_state()
5300 vdev_propagate_state(vd->vdev_parent); in vdev_propagate_state()
5312 vdev_set_state(vdev_t *vd, boolean_t isopen, vdev_state_t state, vdev_aux_t aux) in vdev_set_state() argument
5315 spa_t *spa = vd->vdev_spa; in vdev_set_state()
5317 if (state == vd->vdev_state) { in vdev_set_state()
5323 if (vd->vdev_ops->vdev_op_leaf && in vdev_set_state()
5325 (vd->vdev_prevstate >= VDEV_STATE_FAULTED)) { in vdev_set_state()
5327 zfs_post_state_change(spa, vd, vd->vdev_prevstate); in vdev_set_state()
5329 vd->vdev_stat.vs_aux = aux; in vdev_set_state()
5333 save_state = vd->vdev_state; in vdev_set_state()
5335 vd->vdev_state = state; in vdev_set_state()
5336 vd->vdev_stat.vs_aux = aux; in vdev_set_state()
5348 if (!vd->vdev_delayed_close && vdev_is_dead(vd) && in vdev_set_state()
5349 vd->vdev_ops->vdev_op_leaf) in vdev_set_state()
5350 vd->vdev_ops->vdev_op_close(vd); in vdev_set_state()
5352 if (vd->vdev_removed && in vdev_set_state()
5354 (aux == VDEV_AUX_OPEN_FAILED || vd->vdev_checkremove)) { in vdev_set_state()
5364 vd->vdev_state = VDEV_STATE_REMOVED; in vdev_set_state()
5365 vd->vdev_stat.vs_aux = VDEV_AUX_NONE; in vdev_set_state()
5367 vd->vdev_removed = B_TRUE; in vdev_set_state()
5377 vd->vdev_ops->vdev_op_leaf) in vdev_set_state()
5378 vd->vdev_not_present = 1; in vdev_set_state()
5395 if ((vd->vdev_prevstate != state || vd->vdev_forcefault) && in vdev_set_state()
5396 !vd->vdev_not_present && !vd->vdev_checkremove && in vdev_set_state()
5397 vd != spa->spa_root_vdev) { in vdev_set_state()
5426 (void) zfs_ereport_post(class, spa, vd, NULL, NULL, in vdev_set_state()
5431 vd->vdev_removed = B_FALSE; in vdev_set_state()
5433 vd->vdev_removed = B_FALSE; in vdev_set_state()
5440 if (vd->vdev_ops->vdev_op_leaf) { in vdev_set_state()
5442 if ((vd->vdev_prevstate != VDEV_STATE_UNKNOWN) && in vdev_set_state()
5443 (vd->vdev_prevstate != vd->vdev_state) && in vdev_set_state()
5445 save_state = vd->vdev_prevstate; in vdev_set_state()
5449 zfs_post_state_change(spa, vd, save_state); in vdev_set_state()
5452 if (!isopen && vd->vdev_parent) in vdev_set_state()
5453 vdev_propagate_state(vd->vdev_parent); in vdev_set_state()
5457 vdev_children_are_offline(vdev_t *vd) in vdev_children_are_offline() argument
5459 ASSERT(!vd->vdev_ops->vdev_op_leaf); in vdev_children_are_offline()
5461 for (uint64_t i = 0; i < vd->vdev_children; i++) { in vdev_children_are_offline()
5462 if (vd->vdev_child[i]->vdev_state != VDEV_STATE_OFFLINE) in vdev_children_are_offline()
5474 vdev_is_bootable(vdev_t *vd) in vdev_is_bootable() argument
5476 if (!vd->vdev_ops->vdev_op_leaf) { in vdev_is_bootable()
5477 const char *vdev_type = vd->vdev_ops->vdev_op_type; in vdev_is_bootable()
5483 for (int c = 0; c < vd->vdev_children; c++) { in vdev_is_bootable()
5484 if (!vdev_is_bootable(vd->vdev_child[c])) in vdev_is_bootable()
5491 vdev_is_concrete(vdev_t *vd) in vdev_is_concrete() argument
5493 vdev_ops_t *ops = vd->vdev_ops; in vdev_is_concrete()
5508 vdev_log_state_valid(vdev_t *vd) in vdev_log_state_valid() argument
5510 if (vd->vdev_ops->vdev_op_leaf && !vd->vdev_faulted && in vdev_log_state_valid()
5511 !vd->vdev_removed) in vdev_log_state_valid()
5514 for (int c = 0; c < vd->vdev_children; c++) in vdev_log_state_valid()
5515 if (vdev_log_state_valid(vd->vdev_child[c])) in vdev_log_state_valid()
5525 vdev_expand(vdev_t *vd, uint64_t txg) in vdev_expand() argument
5527 ASSERT(vd->vdev_top == vd); in vdev_expand()
5528 ASSERT(spa_config_held(vd->vdev_spa, SCL_ALL, RW_WRITER) == SCL_ALL); in vdev_expand()
5529 ASSERT(vdev_is_concrete(vd)); in vdev_expand()
5531 vdev_set_deflate_ratio(vd); in vdev_expand()
5533 if ((vd->vdev_spa->spa_raidz_expand == NULL || in vdev_expand()
5534 vd->vdev_spa->spa_raidz_expand->vre_vdev_id != vd->vdev_id) && in vdev_expand()
5535 (vd->vdev_asize >> vd->vdev_ms_shift) > vd->vdev_ms_count && in vdev_expand()
5536 vdev_is_concrete(vd)) { in vdev_expand()
5537 vdev_metaslab_group_create(vd); in vdev_expand()
5538 VERIFY(vdev_metaslab_init(vd, txg) == 0); in vdev_expand()
5539 vdev_config_dirty(vd); in vdev_expand()
5547 vdev_split(vdev_t *vd) in vdev_split() argument
5549 vdev_t *cvd, *pvd = vd->vdev_parent; in vdev_split()
5553 vdev_remove_child(pvd, vd); in vdev_split()
5567 vdev_deadman(vdev_t *vd, const char *tag) in vdev_deadman() argument
5569 for (int c = 0; c < vd->vdev_children; c++) { in vdev_deadman()
5570 vdev_t *cvd = vd->vdev_child[c]; in vdev_deadman()
5575 if (vd->vdev_ops->vdev_op_leaf) { in vdev_deadman()
5576 vdev_queue_t *vq = &vd->vdev_queue; in vdev_deadman()
5580 spa_t *spa = vd->vdev_spa; in vdev_deadman()
5585 vd->vdev_path, vq->vq_active); in vdev_deadman()
5602 vdev_defer_resilver(vdev_t *vd) in vdev_defer_resilver() argument
5604 ASSERT(vd->vdev_ops->vdev_op_leaf); in vdev_defer_resilver()
5606 vd->vdev_resilver_deferred = B_TRUE; in vdev_defer_resilver()
5607 vd->vdev_spa->spa_resilver_deferred = B_TRUE; in vdev_defer_resilver()
5616 vdev_clear_resilver_deferred(vdev_t *vd, dmu_tx_t *tx) in vdev_clear_resilver_deferred() argument
5619 spa_t *spa = vd->vdev_spa; in vdev_clear_resilver_deferred()
5621 for (int c = 0; c < vd->vdev_children; c++) { in vdev_clear_resilver_deferred()
5622 vdev_t *cvd = vd->vdev_child[c]; in vdev_clear_resilver_deferred()
5626 if (vd == spa->spa_root_vdev && in vdev_clear_resilver_deferred()
5629 vdev_config_dirty(vd); in vdev_clear_resilver_deferred()
5634 if (!vdev_is_concrete(vd) || vd->vdev_aux || in vdev_clear_resilver_deferred()
5635 !vd->vdev_ops->vdev_op_leaf) in vdev_clear_resilver_deferred()
5638 vd->vdev_resilver_deferred = B_FALSE; in vdev_clear_resilver_deferred()
5640 return (!vdev_is_dead(vd) && !vd->vdev_offline && in vdev_clear_resilver_deferred()
5641 vdev_resilver_needed(vd, NULL, NULL)); in vdev_clear_resilver_deferred()
5659 vdev_xlate(vdev_t *vd, const range_seg64_t *logical_rs, in vdev_xlate() argument
5665 if (vd != vd->vdev_top) { in vdev_xlate()
5666 vdev_xlate(vd->vdev_parent, logical_rs, physical_rs, in vdev_xlate()
5683 vdev_t *pvd = vd->vdev_parent; in vdev_xlate()
5693 pvd->vdev_ops->vdev_op_xlate(vd, physical_rs, &intermediate, remain_rs); in vdev_xlate()
5700 vdev_xlate_walk(vdev_t *vd, const range_seg64_t *logical_rs, in vdev_xlate_walk() argument
5709 vdev_xlate(vd, &iter_rs, &physical_rs, &remain_rs); in vdev_xlate_walk()
5724 vdev_name(vdev_t *vd, char *buf, int buflen) in vdev_name() argument
5726 if (vd->vdev_path == NULL) { in vdev_name()
5727 if (strcmp(vd->vdev_ops->vdev_op_type, "root") == 0) { in vdev_name()
5728 strlcpy(buf, vd->vdev_spa->spa_name, buflen); in vdev_name()
5729 } else if (!vd->vdev_ops->vdev_op_leaf) { in vdev_name()
5731 vd->vdev_ops->vdev_op_type, in vdev_name()
5732 (u_longlong_t)vd->vdev_id); in vdev_name()
5735 strlcpy(buf, vd->vdev_path, buflen); in vdev_name()
5793 vdev_t *vd; in vdev_props_set_sync() local
5804 vd = spa_lookup_by_guid(spa, vdev_guid, B_TRUE); in vdev_props_set_sync()
5807 if (vd == NULL) in vdev_props_set_sync()
5813 if (vd->vdev_root_zap != 0) { in vdev_props_set_sync()
5814 objid = vd->vdev_root_zap; in vdev_props_set_sync()
5815 } else if (vd->vdev_top_zap != 0) { in vdev_props_set_sync()
5816 objid = vd->vdev_top_zap; in vdev_props_set_sync()
5817 } else if (vd->vdev_leaf_zap != 0) { in vdev_props_set_sync()
5818 objid = vd->vdev_leaf_zap; in vdev_props_set_sync()
5890 vdev_prop_set(vdev_t *vd, nvlist_t *innvl, nvlist_t *outnvl) in vdev_prop_set() argument
5892 spa_t *spa = vd->vdev_spa; in vdev_prop_set()
5898 ASSERT(vd != NULL); in vdev_prop_set()
5901 if (vd->vdev_root_zap == 0 && in vdev_prop_set()
5902 vd->vdev_top_zap == 0 && in vdev_prop_set()
5903 vd->vdev_leaf_zap == 0) in vdev_prop_set()
5914 if ((vd = spa_lookup_by_guid(spa, vdev_guid, B_TRUE)) == NULL) in vdev_prop_set()
5936 if (vd->vdev_path == NULL) { in vdev_prop_set()
5956 if (intval != vd->vdev_noalloc) in vdev_prop_set()
5968 vd->vdev_failfast = intval & 1; in vdev_prop_set()
5975 vd->vdev_checksum_n = intval; in vdev_prop_set()
5982 vd->vdev_checksum_t = intval; in vdev_prop_set()
5989 vd->vdev_io_n = intval; in vdev_prop_set()
5996 vd->vdev_io_t = intval; in vdev_prop_set()
6003 vd->vdev_slow_io_n = intval; in vdev_prop_set()
6010 vd->vdev_slow_io_t = intval; in vdev_prop_set()
6029 vdev_prop_get(vdev_t *vd, nvlist_t *innvl, nvlist_t *outnvl) in vdev_prop_get() argument
6031 spa_t *spa = vd->vdev_spa; in vdev_prop_get()
6043 ASSERT(vd != NULL); in vdev_prop_get()
6052 if (vd->vdev_root_zap != 0) { in vdev_prop_get()
6053 objid = vd->vdev_root_zap; in vdev_prop_get()
6054 } else if (vd->vdev_top_zap != 0) { in vdev_prop_get()
6055 objid = vd->vdev_top_zap; in vdev_prop_get()
6056 } else if (vd->vdev_leaf_zap != 0) { in vdev_prop_get()
6057 objid = vd->vdev_leaf_zap; in vdev_prop_get()
6079 strval = vdev_name(vd, namebuf, in vdev_prop_get()
6088 intval = (vd->vdev_stat.vs_dspace == 0) ? 0 : in vdev_prop_get()
6089 (vd->vdev_stat.vs_alloc * 100 / in vdev_prop_get()
6090 vd->vdev_stat.vs_dspace); in vdev_prop_get()
6096 vd->vdev_state, ZPROP_SRC_NONE); in vdev_prop_get()
6100 vd->vdev_guid, ZPROP_SRC_NONE); in vdev_prop_get()
6104 vd->vdev_asize, ZPROP_SRC_NONE); in vdev_prop_get()
6108 vd->vdev_psize, ZPROP_SRC_NONE); in vdev_prop_get()
6112 vd->vdev_ashift, ZPROP_SRC_NONE); in vdev_prop_get()
6116 vd->vdev_stat.vs_dspace, ZPROP_SRC_NONE); in vdev_prop_get()
6120 vd->vdev_stat.vs_dspace - in vdev_prop_get()
6121 vd->vdev_stat.vs_alloc, ZPROP_SRC_NONE); in vdev_prop_get()
6125 vd->vdev_stat.vs_alloc, ZPROP_SRC_NONE); in vdev_prop_get()
6129 vd->vdev_stat.vs_esize, ZPROP_SRC_NONE); in vdev_prop_get()
6133 vd->vdev_stat.vs_fragmentation, in vdev_prop_get()
6138 vdev_get_nparity(vd), ZPROP_SRC_NONE); in vdev_prop_get()
6141 if (vd->vdev_path == NULL) in vdev_prop_get()
6144 vd->vdev_path, 0, ZPROP_SRC_NONE); in vdev_prop_get()
6147 if (vd->vdev_devid == NULL) in vdev_prop_get()
6150 vd->vdev_devid, 0, ZPROP_SRC_NONE); in vdev_prop_get()
6153 if (vd->vdev_physpath == NULL) in vdev_prop_get()
6156 vd->vdev_physpath, 0, ZPROP_SRC_NONE); in vdev_prop_get()
6159 if (vd->vdev_enc_sysfs_path == NULL) in vdev_prop_get()
6162 vd->vdev_enc_sysfs_path, 0, ZPROP_SRC_NONE); in vdev_prop_get()
6165 if (vd->vdev_fru == NULL) in vdev_prop_get()
6168 vd->vdev_fru, 0, ZPROP_SRC_NONE); in vdev_prop_get()
6171 if (vd->vdev_parent != NULL) { in vdev_prop_get()
6172 strval = vdev_name(vd->vdev_parent, in vdev_prop_get()
6179 if (vd->vdev_children > 0) in vdev_prop_get()
6182 for (uint64_t i = 0; i < vd->vdev_children; in vdev_prop_get()
6186 vname = vdev_name(vd->vdev_child[i], in vdev_prop_get()
6203 vd->vdev_children, ZPROP_SRC_NONE); in vdev_prop_get()
6207 vd->vdev_stat.vs_read_errors, in vdev_prop_get()
6212 vd->vdev_stat.vs_write_errors, in vdev_prop_get()
6217 vd->vdev_stat.vs_checksum_errors, in vdev_prop_get()
6222 vd->vdev_stat.vs_initialize_errors, in vdev_prop_get()
6227 vd->vdev_stat.vs_ops[ZIO_TYPE_NULL], in vdev_prop_get()
6232 vd->vdev_stat.vs_ops[ZIO_TYPE_READ], in vdev_prop_get()
6237 vd->vdev_stat.vs_ops[ZIO_TYPE_WRITE], in vdev_prop_get()
6242 vd->vdev_stat.vs_ops[ZIO_TYPE_FREE], in vdev_prop_get()
6247 vd->vdev_stat.vs_ops[ZIO_TYPE_CLAIM], in vdev_prop_get()
6258 vd->vdev_stat.vs_ops[ZIO_TYPE_FLUSH], in vdev_prop_get()
6263 vd->vdev_stat.vs_bytes[ZIO_TYPE_NULL], in vdev_prop_get()
6268 vd->vdev_stat.vs_bytes[ZIO_TYPE_READ], in vdev_prop_get()
6273 vd->vdev_stat.vs_bytes[ZIO_TYPE_WRITE], in vdev_prop_get()
6278 vd->vdev_stat.vs_bytes[ZIO_TYPE_FREE], in vdev_prop_get()
6283 vd->vdev_stat.vs_bytes[ZIO_TYPE_CLAIM], in vdev_prop_get()
6294 vd->vdev_stat.vs_bytes[ZIO_TYPE_FLUSH], in vdev_prop_get()
6299 vd->vdev_removing, ZPROP_SRC_NONE); in vdev_prop_get()
6303 if (vd->vdev_ops == &vdev_raidz_ops) { in vdev_prop_get()
6305 NULL, vd->vdev_rz_expanding, in vdev_prop_get()
6312 if (vd->vdev_mg == NULL && in vdev_prop_get()
6313 vd->vdev_top != NULL) { in vdev_prop_get()
6317 err = vdev_prop_get_int(vd, prop, in vdev_prop_get()
6357 err = vdev_prop_get_int(vd, prop, &intval); in vdev_prop_get()