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()
631 if (vd->vdev_children == 0) in vdev_config_generate()
634 child = kmem_alloc(vd->vdev_children * sizeof (nvlist_t *), in vdev_config_generate()
637 for (c = 0, idx = 0; c < vd->vdev_children; c++) { in vdev_config_generate()
638 vdev_t *cvd = vd->vdev_child[c]; in vdev_config_generate()
661 kmem_free(child, vd->vdev_children * sizeof (nvlist_t *)); in vdev_config_generate()
666 if (vd->vdev_offline && !vd->vdev_tmpoffline) in vdev_config_generate()
668 if (vd->vdev_resilver_txg != 0) in vdev_config_generate()
670 vd->vdev_resilver_txg); in vdev_config_generate()
671 if (vd->vdev_faulted) in vdev_config_generate()
673 if (vd->vdev_degraded) in vdev_config_generate()
675 if (vd->vdev_removed) in vdev_config_generate()
677 if (vd->vdev_unspare) in vdev_config_generate()
679 if (vd->vdev_ishole) in vdev_config_generate()
682 switch (vd->vdev_stat.vs_aux) { in vdev_config_generate()
695 if (vd->vdev_splitting && vd->vdev_orig_guid != 0LL) { in vdev_config_generate()
697 vd->vdev_orig_guid); in vdev_config_generate()
747 vdev_label_read_config(vdev_t *vd, uint64_t txg) in vdev_label_read_config() argument
749 spa_t *spa = vd->vdev_spa; in vdev_label_read_config()
762 if (!vdev_readable(vd)) in vdev_label_read_config()
774 vdev_label_read(zio, vd, l, vp_abd, in vdev_label_read_config()
815 vdev_dbgmsg(vd, "label discarded as txg is too large " in vdev_label_read_config()
830 vdev_inuse(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason, in vdev_inuse() argument
833 spa_t *spa = vd->vdev_spa; in vdev_inuse()
846 if ((label = vdev_label_read_config(vd, -1ULL)) == NULL) in vdev_inuse()
949 vdev_label_init(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason) in vdev_label_init() argument
951 spa_t *spa = vd->vdev_spa; in vdev_label_init()
967 for (int c = 0; c < vd->vdev_children; c++) in vdev_label_init()
968 if ((error = vdev_label_init(vd->vdev_child[c], in vdev_label_init()
973 vd->vdev_crtxg = crtxg; in vdev_label_init()
975 if (!vd->vdev_ops->vdev_op_leaf || !spa_writeable(spa)) in vdev_label_init()
981 if (vdev_is_dead(vd)) in vdev_label_init()
988 vdev_inuse(vd, crtxg, reason, &spare_guid, &l2cache_guid)) in vdev_label_init()
999 uint64_t guid_delta = spare_guid - vd->vdev_guid; in vdev_label_init()
1001 vd->vdev_guid += guid_delta; in vdev_label_init()
1003 for (vdev_t *pvd = vd; pvd != NULL; pvd = pvd->vdev_parent) in vdev_label_init()
1019 uint64_t guid_delta = l2cache_guid - vd->vdev_guid; in vdev_label_init()
1021 vd->vdev_guid += guid_delta; in vdev_label_init()
1023 for (vdev_t *pvd = vd; pvd != NULL; pvd = pvd->vdev_parent) in vdev_label_init()
1050 (reason == VDEV_LABEL_REMOVE && vd->vdev_isspare)) { in vdev_label_init()
1065 vd->vdev_guid) == 0); in vdev_label_init()
1067 (reason == VDEV_LABEL_REMOVE && vd->vdev_isl2cache)) { in vdev_label_init()
1078 vd->vdev_guid) == 0); in vdev_label_init()
1084 label = spa_config_generate(spa, vd, txg, B_FALSE); in vdev_label_init()
1127 vdev_label_write(zio, vd, l, vp_abd, in vdev_label_init()
1136 vdev_label_write(zio, vd, l, bootenv, in vdev_label_init()
1140 vdev_label_write(zio, vd, l, ub_abd, in vdev_label_init()
1163 if (error == 0 && !vd->vdev_isspare && in vdev_label_init()
1165 spa_spare_exists(vd->vdev_guid, NULL, NULL))) in vdev_label_init()
1166 spa_spare_add(vd); in vdev_label_init()
1168 if (error == 0 && !vd->vdev_isl2cache && in vdev_label_init()
1170 spa_l2cache_exists(vd->vdev_guid, NULL))) in vdev_label_init()
1171 spa_l2cache_add(vd); in vdev_label_init()
1204 vdev_label_read_bootenv_impl(zio_t *zio, vdev_t *vd, int flags) in vdev_label_read_bootenv_impl() argument
1206 for (int c = 0; c < vd->vdev_children; c++) in vdev_label_read_bootenv_impl()
1207 vdev_label_read_bootenv_impl(zio, vd->vdev_child[c], flags); in vdev_label_read_bootenv_impl()
1215 if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) { in vdev_label_read_bootenv_impl()
1217 vdev_label_read(zio, vd, l, in vdev_label_read_bootenv_impl()
1292 vdev_label_write_bootenv(vdev_t *vd, nvlist_t *env) in vdev_label_write_bootenv() argument
1295 spa_t *spa = vd->vdev_spa; in vdev_label_write_bootenv()
1313 for (int c = 0; c < vd->vdev_children; c++) { in vdev_label_write_bootenv()
1316 child_err = vdev_label_write_bootenv(vd->vdev_child[c], env); in vdev_label_write_bootenv()
1325 if (!vd->vdev_ops->vdev_op_leaf || vdev_is_dead(vd) || in vdev_label_write_bootenv()
1326 !vdev_writeable(vd)) { in vdev_label_write_bootenv()
1367 vdev_label_write(zio, vd, l, abd, in vdev_label_write_bootenv()
1441 vdev_t *vd = zio->io_vd; in vdev_uberblock_load_done() local
1447 ASSERT3U(zio->io_size, ==, VDEV_UBERBLOCK_SIZE(vd)); in vdev_uberblock_load_done()
1460 cbp->ubl_vd = vd; in vdev_uberblock_load_done()
1469 vdev_uberblock_load_impl(zio_t *zio, vdev_t *vd, int flags, in vdev_uberblock_load_impl() argument
1472 for (int c = 0; c < vd->vdev_children; c++) in vdev_uberblock_load_impl()
1473 vdev_uberblock_load_impl(zio, vd->vdev_child[c], flags, cbp); in vdev_uberblock_load_impl()
1475 if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) { in vdev_uberblock_load_impl()
1477 for (int n = 0; n < VDEV_UBERBLOCK_COUNT(vd); n++) { in vdev_uberblock_load_impl()
1478 vdev_label_read(zio, vd, l, in vdev_uberblock_load_impl()
1479 abd_alloc_linear(VDEV_UBERBLOCK_SIZE(vd), in vdev_uberblock_load_impl()
1480 B_TRUE), VDEV_UBERBLOCK_OFFSET(vd, n), in vdev_uberblock_load_impl()
1481 VDEV_UBERBLOCK_SIZE(vd), in vdev_uberblock_load_impl()
1558 uberblock_t *ub, vdev_t *vd, int flags) in vdev_uberblock_sync() argument
1560 for (uint64_t c = 0; c < vd->vdev_children; c++) { in vdev_uberblock_sync()
1562 ub, vd->vdev_child[c], flags); in vdev_uberblock_sync()
1565 if (!vd->vdev_ops->vdev_op_leaf) in vdev_uberblock_sync()
1568 if (!vdev_writeable(vd)) in vdev_uberblock_sync()
1571 int m = spa_multihost(vd->vdev_spa) ? MMP_BLOCKS_PER_LABEL : 0; in vdev_uberblock_sync()
1572 int n = ub->ub_txg % (VDEV_UBERBLOCK_COUNT(vd) - m); in vdev_uberblock_sync()
1575 abd_t *ub_abd = abd_alloc_for_io(VDEV_UBERBLOCK_SIZE(vd), B_TRUE); in vdev_uberblock_sync()
1576 abd_zero(ub_abd, VDEV_UBERBLOCK_SIZE(vd)); in vdev_uberblock_sync()
1580 vdev_label_write(zio, vd, l, ub_abd, in vdev_uberblock_sync()
1581 VDEV_UBERBLOCK_OFFSET(vd, n), VDEV_UBERBLOCK_SIZE(vd), in vdev_uberblock_sync()
1661 vdev_t *vd, int l, uint64_t txg, int flags) in vdev_label_sync() argument
1669 for (int c = 0; c < vd->vdev_children; c++) { in vdev_label_sync()
1671 vd->vdev_child[c], l, txg, flags); in vdev_label_sync()
1674 if (!vd->vdev_ops->vdev_op_leaf) in vdev_label_sync()
1677 if (!vdev_writeable(vd)) in vdev_label_sync()
1683 label = spa_config_generate(vd->vdev_spa, vd, txg, B_FALSE); in vdev_label_sync()
1694 vdev_label_write(zio, vd, l, vp_abd, in vdev_label_sync()
1710 vdev_t *vd; in vdev_label_sync_list() local
1719 for (vd = list_head(dl); vd != NULL; vd = list_next(dl, vd)) { in vdev_label_sync_list()
1723 ASSERT(!vd->vdev_ishole); in vdev_label_sync_list()
1726 (vd->vdev_islog || vd->vdev_aux != NULL) ? in vdev_label_sync_list()
1729 vdev_label_sync(vio, good_writes, vd, l, txg, flags); in vdev_label_sync_list()
1740 for (vd = list_head(dl); vd != NULL; vd = list_next(dl, vd)) in vdev_label_sync_list()
1741 zio_flush(zio, vd); in vdev_label_sync_list()
1811 for (vdev_t *vd = in vdev_config_sync() local
1812 txg_list_head(&spa->spa_vdev_txg_list, TXG_CLEAN(txg)); vd != NULL; in vdev_config_sync()
1813 vd = txg_list_next(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg))) in vdev_config_sync()
1814 zio_flush(zio, vd); in vdev_config_sync()