Lines Matching refs:vd

187 vdev_label_read(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t offset,  in vdev_label_read()  argument
195 zio_nowait(zio_read_phys(zio, vd, in vdev_label_read()
196 vdev_label_offset(vd->vdev_psize, l, offset), in vdev_label_read()
202 vdev_label_write(zio_t *zio, vdev_t *vd, int l, abd_t *buf, uint64_t offset, in vdev_label_write() argument
210 zio_nowait(zio_write_phys(zio, vd, in vdev_label_write()
211 vdev_label_offset(vd->vdev_psize, l, offset), in vdev_label_write()
220 vdev_config_generate_stats(vdev_t *vd, nvlist_t *nv) in vdev_config_generate_stats() argument
229 vdev_get_stats_ex(vd, vs, vsx); in vdev_config_generate_stats()
380 root_vdev_actions_getprogress(vdev_t *vd, nvlist_t *nvl) in root_vdev_actions_getprogress() argument
382 spa_t *spa = vd->vdev_spa; in root_vdev_actions_getprogress()
384 if (vd != spa->spa_root_vdev) in root_vdev_actions_getprogress()
414 vdev_config_generate(spa_t *spa, vdev_t *vd, boolean_t getstats, in vdev_config_generate() argument
418 vdev_indirect_config_t *vic = &vd->vdev_indirect_config; in vdev_config_generate()
422 fnvlist_add_string(nv, ZPOOL_CONFIG_TYPE, vd->vdev_ops->vdev_op_type); in vdev_config_generate()
424 fnvlist_add_uint64(nv, ZPOOL_CONFIG_ID, vd->vdev_id); in vdev_config_generate()
425 fnvlist_add_uint64(nv, ZPOOL_CONFIG_GUID, vd->vdev_guid); in vdev_config_generate()
427 if (vd->vdev_path != NULL) in vdev_config_generate()
428 fnvlist_add_string(nv, ZPOOL_CONFIG_PATH, vd->vdev_path); in vdev_config_generate()
430 if (vd->vdev_devid != NULL) in vdev_config_generate()
431 fnvlist_add_string(nv, ZPOOL_CONFIG_DEVID, vd->vdev_devid); in vdev_config_generate()
433 if (vd->vdev_physpath != NULL) in vdev_config_generate()
435 vd->vdev_physpath); in vdev_config_generate()
437 if (vd->vdev_fru != NULL) in vdev_config_generate()
438 fnvlist_add_string(nv, ZPOOL_CONFIG_FRU, vd->vdev_fru); in vdev_config_generate()
440 if (vd->vdev_nparity != 0) { in vdev_config_generate()
441 ASSERT(strcmp(vd->vdev_ops->vdev_op_type, in vdev_config_generate()
448 ASSERT(vd->vdev_nparity == 1 || in vdev_config_generate()
449 (vd->vdev_nparity <= 2 && in vdev_config_generate()
451 (vd->vdev_nparity <= 3 && in vdev_config_generate()
459 fnvlist_add_uint64(nv, ZPOOL_CONFIG_NPARITY, vd->vdev_nparity); in vdev_config_generate()
462 if (vd->vdev_wholedisk != -1ULL) in vdev_config_generate()
464 vd->vdev_wholedisk); in vdev_config_generate()
466 if (vd->vdev_not_present && !(flags & VDEV_CONFIG_MISSING)) in vdev_config_generate()
469 if (vd->vdev_isspare) in vdev_config_generate()
473 vd == vd->vdev_top) { in vdev_config_generate()
475 vd->vdev_ms_array); in vdev_config_generate()
477 vd->vdev_ms_shift); in vdev_config_generate()
478 fnvlist_add_uint64(nv, ZPOOL_CONFIG_ASHIFT, vd->vdev_ashift); in vdev_config_generate()
480 vd->vdev_asize); in vdev_config_generate()
481 fnvlist_add_uint64(nv, ZPOOL_CONFIG_IS_LOG, vd->vdev_islog); in vdev_config_generate()
482 if (vd->vdev_removing) { in vdev_config_generate()
484 vd->vdev_removing); in vdev_config_generate()
488 if (getstats && vd->vdev_alloc_bias != VDEV_BIAS_NONE) { in vdev_config_generate()
491 switch (vd->vdev_alloc_bias) { in vdev_config_generate()
502 ASSERT3U(vd->vdev_alloc_bias, ==, in vdev_config_generate()
510 if (vd->vdev_dtl_sm != NULL) { in vdev_config_generate()
512 space_map_object(vd->vdev_dtl_sm)); in vdev_config_generate()
530 if (vd->vdev_crtxg) in vdev_config_generate()
531 fnvlist_add_uint64(nv, ZPOOL_CONFIG_CREATE_TXG, vd->vdev_crtxg); in vdev_config_generate()
534 if (vd->vdev_leaf_zap != 0) { in vdev_config_generate()
535 ASSERT(vd->vdev_ops->vdev_op_leaf); in vdev_config_generate()
537 vd->vdev_leaf_zap); in vdev_config_generate()
540 if (vd->vdev_top_zap != 0) { in vdev_config_generate()
541 ASSERT(vd == vd->vdev_top); in vdev_config_generate()
543 vd->vdev_top_zap); in vdev_config_generate()
546 if (vd->vdev_resilver_deferred) { in vdev_config_generate()
547 ASSERT(vd->vdev_ops->vdev_op_leaf); in vdev_config_generate()
554 vdev_config_generate_stats(vd, nv); in vdev_config_generate()
556 root_vdev_actions_getprogress(vd, nv); in vdev_config_generate()
563 rw_enter(&vd->vdev_indirect_rwlock, RW_READER); in vdev_config_generate()
564 if (vd->vdev_indirect_mapping != NULL) { in vdev_config_generate()
565 ASSERT(vd->vdev_indirect_births != NULL); in vdev_config_generate()
567 vd->vdev_indirect_mapping; in vdev_config_generate()
571 rw_exit(&vd->vdev_indirect_rwlock); in vdev_config_generate()
572 if (vd->vdev_mg != NULL && in vdev_config_generate()
573 vd->vdev_mg->mg_fragmentation != ZFS_FRAG_INVALID) { in vdev_config_generate()
584 uint64_t to_alloc = vd->vdev_stat.vs_alloc; in vdev_config_generate()
597 vd->vdev_mg->mg_histogram[i] << in vdev_config_generate()
601 vd->vdev_mg->mg_histogram[i]; in vdev_config_generate()
618 if (!vd->vdev_ops->vdev_op_leaf) { in vdev_config_generate()
622 ASSERT(!vd->vdev_ishole); in vdev_config_generate()
624 child = kmem_alloc(vd->vdev_children * sizeof (nvlist_t *), in vdev_config_generate()
627 for (c = 0, idx = 0; c < vd->vdev_children; c++) { in vdev_config_generate()
628 vdev_t *cvd = vd->vdev_child[c]; in vdev_config_generate()
651 kmem_free(child, vd->vdev_children * sizeof (nvlist_t *)); in vdev_config_generate()
656 if (vd->vdev_offline && !vd->vdev_tmpoffline) in vdev_config_generate()
658 if (vd->vdev_resilver_txg != 0) in vdev_config_generate()
660 vd->vdev_resilver_txg); in vdev_config_generate()
661 if (vd->vdev_faulted) in vdev_config_generate()
663 if (vd->vdev_degraded) in vdev_config_generate()
665 if (vd->vdev_removed) in vdev_config_generate()
667 if (vd->vdev_unspare) in vdev_config_generate()
669 if (vd->vdev_ishole) in vdev_config_generate()
672 switch (vd->vdev_stat.vs_aux) { in vdev_config_generate()
685 if (vd->vdev_splitting && vd->vdev_orig_guid != 0LL) { in vdev_config_generate()
687 vd->vdev_orig_guid); in vdev_config_generate()
737 vdev_label_read_config(vdev_t *vd, uint64_t txg) in vdev_label_read_config() argument
739 spa_t *spa = vd->vdev_spa; in vdev_label_read_config()
752 if (!vdev_readable(vd)) in vdev_label_read_config()
764 vdev_label_read(zio, vd, l, vp_abd, in vdev_label_read_config()
805 vdev_dbgmsg(vd, "label discarded as txg is too large " in vdev_label_read_config()
820 vdev_inuse(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason, in vdev_inuse() argument
823 spa_t *spa = vd->vdev_spa; in vdev_inuse()
836 if ((label = vdev_label_read_config(vd, -1ULL)) == NULL) in vdev_inuse()
939 vdev_label_init(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason) in vdev_label_init() argument
941 spa_t *spa = vd->vdev_spa; in vdev_label_init()
957 for (int c = 0; c < vd->vdev_children; c++) in vdev_label_init()
958 if ((error = vdev_label_init(vd->vdev_child[c], in vdev_label_init()
963 vd->vdev_crtxg = crtxg; in vdev_label_init()
965 if (!vd->vdev_ops->vdev_op_leaf || !spa_writeable(spa)) in vdev_label_init()
971 if (vdev_is_dead(vd)) in vdev_label_init()
978 vdev_inuse(vd, crtxg, reason, &spare_guid, &l2cache_guid)) in vdev_label_init()
989 uint64_t guid_delta = spare_guid - vd->vdev_guid; in vdev_label_init()
991 vd->vdev_guid += guid_delta; in vdev_label_init()
993 for (vdev_t *pvd = vd; pvd != NULL; pvd = pvd->vdev_parent) in vdev_label_init()
1009 uint64_t guid_delta = l2cache_guid - vd->vdev_guid; in vdev_label_init()
1011 vd->vdev_guid += guid_delta; in vdev_label_init()
1013 for (vdev_t *pvd = vd; pvd != NULL; pvd = pvd->vdev_parent) in vdev_label_init()
1040 (reason == VDEV_LABEL_REMOVE && vd->vdev_isspare)) { in vdev_label_init()
1055 vd->vdev_guid) == 0); in vdev_label_init()
1057 (reason == VDEV_LABEL_REMOVE && vd->vdev_isl2cache)) { in vdev_label_init()
1068 vd->vdev_guid) == 0); in vdev_label_init()
1074 label = spa_config_generate(spa, vd, txg, B_FALSE); in vdev_label_init()
1117 vdev_label_write(zio, vd, l, vp_abd, in vdev_label_init()
1126 vdev_label_write(zio, vd, l, bootenv, in vdev_label_init()
1130 vdev_label_write(zio, vd, l, ub_abd, in vdev_label_init()
1153 if (error == 0 && !vd->vdev_isspare && in vdev_label_init()
1155 spa_spare_exists(vd->vdev_guid, NULL, NULL))) in vdev_label_init()
1156 spa_spare_add(vd); in vdev_label_init()
1158 if (error == 0 && !vd->vdev_isl2cache && in vdev_label_init()
1160 spa_l2cache_exists(vd->vdev_guid, NULL))) in vdev_label_init()
1161 spa_l2cache_add(vd); in vdev_label_init()
1194 vdev_label_read_bootenv_impl(zio_t *zio, vdev_t *vd, int flags) in vdev_label_read_bootenv_impl() argument
1196 for (int c = 0; c < vd->vdev_children; c++) in vdev_label_read_bootenv_impl()
1197 vdev_label_read_bootenv_impl(zio, vd->vdev_child[c], flags); in vdev_label_read_bootenv_impl()
1205 if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) { in vdev_label_read_bootenv_impl()
1207 vdev_label_read(zio, vd, l, in vdev_label_read_bootenv_impl()
1282 vdev_label_write_bootenv(vdev_t *vd, nvlist_t *env) in vdev_label_write_bootenv() argument
1285 spa_t *spa = vd->vdev_spa; in vdev_label_write_bootenv()
1303 for (int c = 0; c < vd->vdev_children; c++) { in vdev_label_write_bootenv()
1306 child_err = vdev_label_write_bootenv(vd->vdev_child[c], env); in vdev_label_write_bootenv()
1315 if (!vd->vdev_ops->vdev_op_leaf || vdev_is_dead(vd) || in vdev_label_write_bootenv()
1316 !vdev_writeable(vd)) { in vdev_label_write_bootenv()
1357 vdev_label_write(zio, vd, l, abd, in vdev_label_write_bootenv()
1431 vdev_t *vd = zio->io_vd; in vdev_uberblock_load_done() local
1437 ASSERT3U(zio->io_size, ==, VDEV_UBERBLOCK_SIZE(vd)); in vdev_uberblock_load_done()
1450 cbp->ubl_vd = vd; in vdev_uberblock_load_done()
1459 vdev_uberblock_load_impl(zio_t *zio, vdev_t *vd, int flags, in vdev_uberblock_load_impl() argument
1462 for (int c = 0; c < vd->vdev_children; c++) in vdev_uberblock_load_impl()
1463 vdev_uberblock_load_impl(zio, vd->vdev_child[c], flags, cbp); in vdev_uberblock_load_impl()
1465 if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) { in vdev_uberblock_load_impl()
1467 for (int n = 0; n < VDEV_UBERBLOCK_COUNT(vd); n++) { in vdev_uberblock_load_impl()
1468 vdev_label_read(zio, vd, l, in vdev_uberblock_load_impl()
1469 abd_alloc_linear(VDEV_UBERBLOCK_SIZE(vd), in vdev_uberblock_load_impl()
1470 B_TRUE), VDEV_UBERBLOCK_OFFSET(vd, n), in vdev_uberblock_load_impl()
1471 VDEV_UBERBLOCK_SIZE(vd), in vdev_uberblock_load_impl()
1548 uberblock_t *ub, vdev_t *vd, int flags) in vdev_uberblock_sync() argument
1550 for (uint64_t c = 0; c < vd->vdev_children; c++) { in vdev_uberblock_sync()
1552 ub, vd->vdev_child[c], flags); in vdev_uberblock_sync()
1555 if (!vd->vdev_ops->vdev_op_leaf) in vdev_uberblock_sync()
1558 if (!vdev_writeable(vd)) in vdev_uberblock_sync()
1561 int m = spa_multihost(vd->vdev_spa) ? MMP_BLOCKS_PER_LABEL : 0; in vdev_uberblock_sync()
1562 int n = ub->ub_txg % (VDEV_UBERBLOCK_COUNT(vd) - m); in vdev_uberblock_sync()
1565 abd_t *ub_abd = abd_alloc_for_io(VDEV_UBERBLOCK_SIZE(vd), B_TRUE); in vdev_uberblock_sync()
1566 abd_zero(ub_abd, VDEV_UBERBLOCK_SIZE(vd)); in vdev_uberblock_sync()
1570 vdev_label_write(zio, vd, l, ub_abd, in vdev_uberblock_sync()
1571 VDEV_UBERBLOCK_OFFSET(vd, n), VDEV_UBERBLOCK_SIZE(vd), in vdev_uberblock_sync()
1651 vdev_t *vd, int l, uint64_t txg, int flags) in vdev_label_sync() argument
1659 for (int c = 0; c < vd->vdev_children; c++) { in vdev_label_sync()
1661 vd->vdev_child[c], l, txg, flags); in vdev_label_sync()
1664 if (!vd->vdev_ops->vdev_op_leaf) in vdev_label_sync()
1667 if (!vdev_writeable(vd)) in vdev_label_sync()
1673 label = spa_config_generate(vd->vdev_spa, vd, txg, B_FALSE); in vdev_label_sync()
1684 vdev_label_write(zio, vd, l, vp_abd, in vdev_label_sync()
1700 vdev_t *vd; in vdev_label_sync_list() local
1709 for (vd = list_head(dl); vd != NULL; vd = list_next(dl, vd)) { in vdev_label_sync_list()
1713 ASSERT(!vd->vdev_ishole); in vdev_label_sync_list()
1716 (vd->vdev_islog || vd->vdev_aux != NULL) ? in vdev_label_sync_list()
1719 vdev_label_sync(vio, good_writes, vd, l, txg, flags); in vdev_label_sync_list()
1730 for (vd = list_head(dl); vd != NULL; vd = list_next(dl, vd)) in vdev_label_sync_list()
1731 zio_flush(zio, vd); in vdev_label_sync_list()
1801 for (vdev_t *vd = in vdev_config_sync() local
1802 txg_list_head(&spa->spa_vdev_txg_list, TXG_CLEAN(txg)); vd != NULL; in vdev_config_sync()
1803 vd = txg_list_next(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg))) in vdev_config_sync()
1804 zio_flush(zio, vd); in vdev_config_sync()