Lines Matching refs:vd
1209 vdev_t *vd; in spa_config_parse() local
1210 if ((error = spa_config_parse(spa, &vd, child[c], *vdp, c, in spa_config_parse()
1334 vdev_t *vd, *tvd; in spa_load_spares() local
1342 vd = spa->spa_spares.sav_vdevs[i]; in spa_load_spares()
1345 if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, in spa_load_spares()
1348 vdev_close(vd); in spa_load_spares()
1349 vdev_free(vd); in spa_load_spares()
1380 VERIFY(spa_config_parse(spa, &vd, spares[i], NULL, 0, in spa_load_spares()
1382 ASSERT(vd != NULL); in spa_load_spares()
1384 spa->spa_spares.sav_vdevs[i] = vd; in spa_load_spares()
1386 if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, in spa_load_spares()
1408 vd->vdev_top = vd; in spa_load_spares()
1409 vd->vdev_aux = &spa->spa_spares; in spa_load_spares()
1411 if (vdev_open(vd) != 0) in spa_load_spares()
1414 if (vdev_validate_aux(vd) == 0) in spa_load_spares()
1415 spa_spare_add(vd); in spa_load_spares()
1452 vdev_t *vd, **oldvdevs, **newvdevs; in spa_load_l2cache() local
1480 vd = oldvdevs[j]; in spa_load_l2cache()
1481 if (vd != NULL && guid == vd->vdev_guid) { in spa_load_l2cache()
1485 newvdevs[i] = vd; in spa_load_l2cache()
1495 VERIFY(spa_config_parse(spa, &vd, l2cache[i], NULL, 0, in spa_load_l2cache()
1497 ASSERT(vd != NULL); in spa_load_l2cache()
1498 newvdevs[i] = vd; in spa_load_l2cache()
1504 spa_l2cache_add(vd); in spa_load_l2cache()
1506 vd->vdev_top = vd; in spa_load_l2cache()
1507 vd->vdev_aux = sav; in spa_load_l2cache()
1509 spa_l2cache_activate(vd); in spa_load_l2cache()
1511 if (vdev_open(vd) != 0) in spa_load_l2cache()
1514 (void) vdev_validate_aux(vd); in spa_load_l2cache()
1516 if (!vdev_is_dead(vd)) { in spa_load_l2cache()
1522 l2arc_add_vdev(spa, vd, do_rebuild); in spa_load_l2cache()
1533 vd = oldvdevs[i]; in spa_load_l2cache()
1534 if (vd != NULL) { in spa_load_l2cache()
1535 ASSERT(vd->vdev_isl2cache); in spa_load_l2cache()
1537 if (spa_l2cache_exists(vd->vdev_guid, &pool) && in spa_load_l2cache()
1538 pool != 0ULL && l2arc_vdev_present(vd)) in spa_load_l2cache()
1539 l2arc_remove_vdev(vd); in spa_load_l2cache()
1540 vdev_clear_stats(vd); in spa_load_l2cache()
1541 vdev_free(vd); in spa_load_l2cache()
1605 spa_check_removed(vdev_t *vd) in spa_check_removed() argument
1607 for (int c = 0; c < vd->vdev_children; c++) in spa_check_removed()
1608 spa_check_removed(vd->vdev_child[c]); in spa_check_removed()
1610 if (vd->vdev_ops->vdev_op_leaf && vdev_is_dead(vd) && in spa_check_removed()
1611 !vd->vdev_ishole) { in spa_check_removed()
1612 zfs_post_autoreplace(vd->vdev_spa, vd); in spa_check_removed()
1613 spa_event_notify(vd->vdev_spa, vd, ESC_ZFS_VDEV_CHECK); in spa_check_removed()
2017 vdev_t **vd; in spa_try_repair() local
2028 vd = kmem_zalloc(gcount * sizeof (vdev_t *), KM_SLEEP); in spa_try_repair()
2036 vd[i] = spa_lookup_by_guid(spa, glist[i], B_FALSE); in spa_try_repair()
2037 if (vd[i] == NULL) { in spa_try_repair()
2045 vd[i]->vdev_offline = B_FALSE; in spa_try_repair()
2054 if (vd[i] != NULL && in spa_try_repair()
2055 vd[i]->vdev_stat.vs_aux != VDEV_AUX_SPLIT_POOL) in spa_try_repair()
2068 if (vd[i] != NULL) in spa_try_repair()
2069 vdev_split(vd[i]); in spa_try_repair()
2073 kmem_free(vd, gcount * sizeof (vdev_t *)); in spa_try_repair()
3157 vdev_t *vd; in spa_add_l2cache() local
3184 vd = NULL; in spa_add_l2cache()
3188 vd = spa->spa_l2cache.sav_vdevs[j]; in spa_add_l2cache()
3192 ASSERT(vd != NULL); in spa_add_l2cache()
3197 vdev_get_stats(vd, vs); in spa_add_l2cache()
3324 vdev_t *vd; in spa_validate_aux_devs() local
3353 if ((error = spa_config_parse(spa, &vd, dev[i], NULL, 0, in spa_validate_aux_devs()
3357 if (!vd->vdev_ops->vdev_op_leaf) { in spa_validate_aux_devs()
3358 vdev_free(vd); in spa_validate_aux_devs()
3369 strcmp(vd->vdev_ops->vdev_op_type, VDEV_TYPE_DISK) != 0) { in spa_validate_aux_devs()
3371 vdev_free(vd); in spa_validate_aux_devs()
3375 vd->vdev_top = vd; in spa_validate_aux_devs()
3377 if ((error = vdev_open(vd)) == 0 && in spa_validate_aux_devs()
3378 (error = vdev_label_init(vd, crtxg, label)) == 0) { in spa_validate_aux_devs()
3380 vd->vdev_guid) == 0); in spa_validate_aux_devs()
3383 vdev_free(vd); in spa_validate_aux_devs()
3468 vdev_t *vd; in spa_l2cache_drop() local
3475 vd = sav->sav_vdevs[i]; in spa_l2cache_drop()
3476 ASSERT(vd != NULL); in spa_l2cache_drop()
3478 if (spa_l2cache_exists(vd->vdev_guid, &pool) && in spa_l2cache_drop()
3479 pool != 0ULL && l2arc_vdev_present(vd)) in spa_l2cache_drop()
3480 l2arc_remove_vdev(vd); in spa_l2cache_drop()
3786 spa_alt_rootvdev(vdev_t *vd, vdev_t **avd, uint64_t *txg) in spa_alt_rootvdev() argument
3788 for (int c = 0; c < vd->vdev_children; c++) in spa_alt_rootvdev()
3789 spa_alt_rootvdev(vd->vdev_child[c], avd, txg); in spa_alt_rootvdev()
3791 if (vd->vdev_ops->vdev_op_leaf) { in spa_alt_rootvdev()
3795 if (vdev_disk_read_rootlabel(vd->vdev_physpath, vd->vdev_devid, in spa_alt_rootvdev()
3807 *avd = vd; in spa_alt_rootvdev()
4373 vdev_t *vd, *tvd; in spa_vdev_add() local
4381 if ((error = spa_config_parse(spa, &vd, nvroot, NULL, 0, in spa_vdev_add()
4385 spa->spa_pending_vdev = vd; /* spa_vdev_exit() will clear this */ in spa_vdev_add()
4395 if (vd->vdev_children == 0 && nspares == 0 && nl2cache == 0) in spa_vdev_add()
4396 return (spa_vdev_exit(spa, vd, txg, EINVAL)); in spa_vdev_add()
4398 if (vd->vdev_children != 0 && in spa_vdev_add()
4399 (error = vdev_create(vd, txg, B_FALSE)) != 0) in spa_vdev_add()
4400 return (spa_vdev_exit(spa, vd, txg, error)); in spa_vdev_add()
4407 return (spa_vdev_exit(spa, vd, txg, error)); in spa_vdev_add()
4412 for (int c = 0; c < vd->vdev_children; c++) { in spa_vdev_add()
4423 tvd = vd->vdev_child[c]; in spa_vdev_add()
4424 vdev_remove_child(vd, tvd); in spa_vdev_add()
4457 (void) spa_vdev_exit(spa, vd, txg, 0); in spa_vdev_add()
4690 vdev_t *vd, *pvd, *cvd, *tvd; in spa_vdev_detach() local
4699 vd = spa_lookup_by_guid(spa, guid, B_FALSE); in spa_vdev_detach()
4701 if (vd == NULL) in spa_vdev_detach()
4704 if (!vd->vdev_ops->vdev_op_leaf) in spa_vdev_detach()
4707 pvd = vd->vdev_parent; in spa_vdev_detach()
4747 if (vdev_dtl_required(vd)) in spa_vdev_detach()
4757 if (pvd->vdev_ops == &vdev_replacing_ops && vd->vdev_id > 0 && in spa_vdev_detach()
4758 vd->vdev_path != NULL) { in spa_vdev_detach()
4759 size_t len = strlen(vd->vdev_path); in spa_vdev_detach()
4764 if (cvd == vd || cvd->vdev_path == NULL) in spa_vdev_detach()
4767 if (strncmp(cvd->vdev_path, vd->vdev_path, len) == 0 && in spa_vdev_detach()
4770 cvd->vdev_path = spa_strdup(vd->vdev_path); in spa_vdev_detach()
4782 vd->vdev_id == 0 && in spa_vdev_detach()
4794 error = vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); in spa_vdev_detach()
4799 vdev_remove_child(pvd, vd); in spa_vdev_detach()
4867 vdpath = spa_strdup(vd->vdev_path); in spa_vdev_detach()
4869 (void) txg_list_remove_this(&tvd->vdev_dtl_list, vd, t); in spa_vdev_detach()
4870 vd->vdev_detached = B_TRUE; in spa_vdev_detach()
4871 vdev_dirty(tvd, VDD_DTL, vd, txg); in spa_vdev_detach()
4873 spa_event_notify(spa, vd, ESC_ZFS_VDEV_REMOVE); in spa_vdev_detach()
4878 error = spa_vdev_exit(spa, vd, txg, 0); in spa_vdev_detach()
4967 vdev_t *vd = rvd->vdev_child[c]; in spa_vdev_split_mirror() local
4970 if (vd->vdev_islog || vd->vdev_ishole) { in spa_vdev_split_mirror()
5244 spa_vdev_remove_evacuate(spa_t *spa, vdev_t *vd) in spa_vdev_remove_evacuate() argument
5251 ASSERT(vd == vd->vdev_top); in spa_vdev_remove_evacuate()
5259 if (vd->vdev_islog) { in spa_vdev_remove_evacuate()
5260 if (vd->vdev_stat.vs_alloc != 0) in spa_vdev_remove_evacuate()
5273 ASSERT0(vd->vdev_stat.vs_alloc); in spa_vdev_remove_evacuate()
5275 vd->vdev_removing = B_TRUE; in spa_vdev_remove_evacuate()
5276 vdev_dirty_leaves(vd, VDD_DTL, txg); in spa_vdev_remove_evacuate()
5277 vdev_config_dirty(vd); in spa_vdev_remove_evacuate()
5287 spa_vdev_remove_from_namespace(spa_t *spa, vdev_t *vd) in spa_vdev_remove_from_namespace() argument
5290 uint64_t id = vd->vdev_id; in spa_vdev_remove_from_namespace()
5295 ASSERT(vd == vd->vdev_top); in spa_vdev_remove_from_namespace()
5300 if (vd->vdev_stat.vs_alloc != 0) in spa_vdev_remove_from_namespace()
5303 (void) vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); in spa_vdev_remove_from_namespace()
5305 if (list_link_active(&vd->vdev_state_dirty_node)) in spa_vdev_remove_from_namespace()
5306 vdev_state_clean(vd); in spa_vdev_remove_from_namespace()
5307 if (list_link_active(&vd->vdev_config_dirty_node)) in spa_vdev_remove_from_namespace()
5308 vdev_config_clean(vd); in spa_vdev_remove_from_namespace()
5310 vdev_free(vd); in spa_vdev_remove_from_namespace()
5315 vd = vdev_alloc_common(spa, id, 0, &vdev_hole_ops); in spa_vdev_remove_from_namespace()
5316 vdev_add_child(rvd, vd); in spa_vdev_remove_from_namespace()
5341 vdev_t *vd; in spa_vdev_remove() local
5354 vd = spa_lookup_by_guid(spa, guid, B_FALSE); in spa_vdev_remove()
5364 if (vd == NULL || unspare) { in spa_vdev_remove()
5383 } else if (vd != NULL && vd->vdev_islog) { in spa_vdev_remove()
5385 ASSERT(vd == vd->vdev_top); in spa_vdev_remove()
5387 mg = vd->vdev_mg; in spa_vdev_remove()
5404 error = spa_vdev_remove_evacuate(spa, vd); in spa_vdev_remove()
5419 spa_vdev_remove_from_namespace(spa, vd); in spa_vdev_remove()
5421 } else if (vd != NULL) { in spa_vdev_remove()
5444 spa_vdev_resilver_done_hunt(vdev_t *vd) in spa_vdev_resilver_done_hunt() argument
5448 for (int c = 0; c < vd->vdev_children; c++) { in spa_vdev_resilver_done_hunt()
5449 oldvd = spa_vdev_resilver_done_hunt(vd->vdev_child[c]); in spa_vdev_resilver_done_hunt()
5462 if (vd->vdev_ops == &vdev_replacing_ops) { in spa_vdev_resilver_done_hunt()
5463 ASSERT(vd->vdev_children > 1); in spa_vdev_resilver_done_hunt()
5465 newvd = vd->vdev_child[vd->vdev_children - 1]; in spa_vdev_resilver_done_hunt()
5466 oldvd = vd->vdev_child[0]; in spa_vdev_resilver_done_hunt()
5477 if (vd->vdev_ops == &vdev_spare_ops) { in spa_vdev_resilver_done_hunt()
5478 vdev_t *first = vd->vdev_child[0]; in spa_vdev_resilver_done_hunt()
5479 vdev_t *last = vd->vdev_child[vd->vdev_children - 1]; in spa_vdev_resilver_done_hunt()
5504 if (vd->vdev_children > 2) { in spa_vdev_resilver_done_hunt()
5505 newvd = vd->vdev_child[1]; in spa_vdev_resilver_done_hunt()
5521 vdev_t *vd, *pvd, *ppvd; in spa_vdev_resilver_done() local
5526 while ((vd = spa_vdev_resilver_done_hunt(spa->spa_root_vdev)) != NULL) { in spa_vdev_resilver_done()
5527 pvd = vd->vdev_parent; in spa_vdev_resilver_done()
5529 guid = vd->vdev_guid; in spa_vdev_resilver_done()
5543 ASSERT(vd->vdev_resilver_txg == 0 || !vdev_dtl_required(vd)); in spa_vdev_resilver_done()
5563 vdev_t *vd; in spa_vdev_set_common() local
5570 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) in spa_vdev_set_common()
5573 if (!vd->vdev_ops->vdev_op_leaf) in spa_vdev_set_common()
5577 if (strcmp(value, vd->vdev_path) != 0) { in spa_vdev_set_common()
5578 spa_strfree(vd->vdev_path); in spa_vdev_set_common()
5579 vd->vdev_path = spa_strdup(value); in spa_vdev_set_common()
5583 if (vd->vdev_fru == NULL) { in spa_vdev_set_common()
5584 vd->vdev_fru = spa_strdup(value); in spa_vdev_set_common()
5586 } else if (strcmp(value, vd->vdev_fru) != 0) { in spa_vdev_set_common()
5587 spa_strfree(vd->vdev_fru); in spa_vdev_set_common()
5588 vd->vdev_fru = spa_strdup(value); in spa_vdev_set_common()
5593 return (spa_vdev_state_exit(spa, sync ? vd : NULL, 0)); in spa_vdev_set_common()
5651 spa_async_remove(spa_t *spa, vdev_t *vd) in spa_async_remove() argument
5653 if (vd->vdev_remove_wanted) { in spa_async_remove()
5654 vd->vdev_remove_wanted = B_FALSE; in spa_async_remove()
5655 vd->vdev_delayed_close = B_FALSE; in spa_async_remove()
5656 vdev_set_state(vd, B_FALSE, VDEV_STATE_REMOVED, VDEV_AUX_NONE); in spa_async_remove()
5664 vd->vdev_stat.vs_read_errors = 0; in spa_async_remove()
5665 vd->vdev_stat.vs_write_errors = 0; in spa_async_remove()
5666 vd->vdev_stat.vs_checksum_errors = 0; in spa_async_remove()
5668 vdev_state_dirty(vd->vdev_top); in spa_async_remove()
5671 for (int c = 0; c < vd->vdev_children; c++) in spa_async_remove()
5672 spa_async_remove(spa, vd->vdev_child[c]); in spa_async_remove()
5676 spa_async_probe(spa_t *spa, vdev_t *vd) in spa_async_probe() argument
5678 if (vd->vdev_probe_wanted) { in spa_async_probe()
5679 vd->vdev_probe_wanted = B_FALSE; in spa_async_probe()
5680 vdev_reopen(vd); /* vdev_open() does the actual probe */ in spa_async_probe()
5683 for (int c = 0; c < vd->vdev_children; c++) in spa_async_probe()
5684 spa_async_probe(spa, vd->vdev_child[c]); in spa_async_probe()
5688 spa_async_autoexpand(spa_t *spa, vdev_t *vd) in spa_async_autoexpand() argument
5697 for (int c = 0; c < vd->vdev_children; c++) { in spa_async_autoexpand()
5698 vdev_t *cvd = vd->vdev_child[c]; in spa_async_autoexpand()
5702 if (!vd->vdev_ops->vdev_op_leaf || vd->vdev_physpath == NULL) in spa_async_autoexpand()
5706 (void) snprintf(physpath, MAXPATHLEN, "/devices%s", vd->vdev_physpath); in spa_async_autoexpand()
6277 vdev_t *vd; in spa_sync() local
6306 while ((vd = list_head(&spa->spa_state_dirty_list)) != NULL) { in spa_sync()
6307 vdev_state_clean(vd); in spa_sync()
6308 vdev_config_dirty(vd); in spa_sync()
6330 vd = rvd->vdev_child[i]; in spa_sync()
6331 if (vd->vdev_deflate_ratio != SPA_MINBLOCKSIZE) in spa_sync()
6371 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, txg)) in spa_sync()
6372 vdev_sync(vd, txg); in spa_sync()
6431 vd = rvd->vdev_child[(c0 + c) % children]; in spa_sync()
6432 if (vd->vdev_ms_array == 0 || vd->vdev_islog) in spa_sync()
6434 svd[svdcount++] = vd; in spa_sync()
6461 while ((vd = list_head(&spa->spa_config_dirty_list)) != NULL) in spa_sync()
6462 vdev_config_clean(vd); in spa_sync()
6481 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, TXG_CLEAN(txg))) in spa_sync()
6482 vdev_sync_done(vd, txg); in spa_sync()
6572 vdev_t *vd; in spa_lookup_by_guid() local
6575 if ((vd = vdev_lookup_by_guid(spa->spa_root_vdev, guid)) != NULL) in spa_lookup_by_guid()
6576 return (vd); in spa_lookup_by_guid()
6580 vd = spa->spa_l2cache.sav_vdevs[i]; in spa_lookup_by_guid()
6581 if (vd->vdev_guid == guid) in spa_lookup_by_guid()
6582 return (vd); in spa_lookup_by_guid()
6586 vd = spa->spa_spares.sav_vdevs[i]; in spa_lookup_by_guid()
6587 if (vd->vdev_guid == guid) in spa_lookup_by_guid()
6588 return (vd); in spa_lookup_by_guid()
6667 spa_event_notify(spa_t *spa, vdev_t *vd, const char *name) in spa_event_notify() argument
6688 if (vd) { in spa_event_notify()
6690 value.value.sv_uint64 = vd->vdev_guid; in spa_event_notify()
6695 if (vd->vdev_path) { in spa_event_notify()
6697 value.value.sv_string = vd->vdev_path; in spa_event_notify()