Lines Matching refs:vd

1208 		vdev_t *vd;  in spa_config_parse()  local
1209 if ((error = spa_config_parse(spa, &vd, child[c], *vdp, c, in spa_config_parse()
1333 vdev_t *vd, *tvd; in spa_load_spares() local
1341 vd = spa->spa_spares.sav_vdevs[i]; in spa_load_spares()
1344 if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, in spa_load_spares()
1347 vdev_close(vd); in spa_load_spares()
1348 vdev_free(vd); in spa_load_spares()
1379 VERIFY(spa_config_parse(spa, &vd, spares[i], NULL, 0, in spa_load_spares()
1381 ASSERT(vd != NULL); in spa_load_spares()
1383 spa->spa_spares.sav_vdevs[i] = vd; in spa_load_spares()
1385 if ((tvd = spa_lookup_by_guid(spa, vd->vdev_guid, in spa_load_spares()
1407 vd->vdev_top = vd; in spa_load_spares()
1408 vd->vdev_aux = &spa->spa_spares; in spa_load_spares()
1410 if (vdev_open(vd) != 0) in spa_load_spares()
1413 if (vdev_validate_aux(vd) == 0) in spa_load_spares()
1414 spa_spare_add(vd); in spa_load_spares()
1451 vdev_t *vd, **oldvdevs, **newvdevs; in spa_load_l2cache() local
1479 vd = oldvdevs[j]; in spa_load_l2cache()
1480 if (vd != NULL && guid == vd->vdev_guid) { in spa_load_l2cache()
1484 newvdevs[i] = vd; in spa_load_l2cache()
1494 VERIFY(spa_config_parse(spa, &vd, l2cache[i], NULL, 0, in spa_load_l2cache()
1496 ASSERT(vd != NULL); in spa_load_l2cache()
1497 newvdevs[i] = vd; in spa_load_l2cache()
1503 spa_l2cache_add(vd); in spa_load_l2cache()
1505 vd->vdev_top = vd; in spa_load_l2cache()
1506 vd->vdev_aux = sav; in spa_load_l2cache()
1508 spa_l2cache_activate(vd); in spa_load_l2cache()
1510 if (vdev_open(vd) != 0) in spa_load_l2cache()
1513 (void) vdev_validate_aux(vd); in spa_load_l2cache()
1515 if (!vdev_is_dead(vd)) { in spa_load_l2cache()
1521 l2arc_add_vdev(spa, vd, do_rebuild); in spa_load_l2cache()
1532 vd = oldvdevs[i]; in spa_load_l2cache()
1533 if (vd != NULL) { in spa_load_l2cache()
1534 ASSERT(vd->vdev_isl2cache); in spa_load_l2cache()
1536 if (spa_l2cache_exists(vd->vdev_guid, &pool) && in spa_load_l2cache()
1537 pool != 0ULL && l2arc_vdev_present(vd)) in spa_load_l2cache()
1538 l2arc_remove_vdev(vd); in spa_load_l2cache()
1539 vdev_clear_stats(vd); in spa_load_l2cache()
1540 vdev_free(vd); in spa_load_l2cache()
1604 spa_check_removed(vdev_t *vd) in spa_check_removed() argument
1606 for (int c = 0; c < vd->vdev_children; c++) in spa_check_removed()
1607 spa_check_removed(vd->vdev_child[c]); in spa_check_removed()
1609 if (vd->vdev_ops->vdev_op_leaf && vdev_is_dead(vd) && in spa_check_removed()
1610 !vd->vdev_ishole) { in spa_check_removed()
1611 zfs_post_autoreplace(vd->vdev_spa, vd); in spa_check_removed()
1612 spa_event_notify(vd->vdev_spa, vd, ESC_ZFS_VDEV_CHECK); in spa_check_removed()
2016 vdev_t **vd; in spa_try_repair() local
2027 vd = kmem_zalloc(gcount * sizeof (vdev_t *), KM_SLEEP); in spa_try_repair()
2035 vd[i] = spa_lookup_by_guid(spa, glist[i], B_FALSE); in spa_try_repair()
2036 if (vd[i] == NULL) { in spa_try_repair()
2044 vd[i]->vdev_offline = B_FALSE; in spa_try_repair()
2053 if (vd[i] != NULL && in spa_try_repair()
2054 vd[i]->vdev_stat.vs_aux != VDEV_AUX_SPLIT_POOL) in spa_try_repair()
2067 if (vd[i] != NULL) in spa_try_repair()
2068 vdev_split(vd[i]); in spa_try_repair()
2072 kmem_free(vd, gcount * sizeof (vdev_t *)); in spa_try_repair()
3143 vdev_t *vd; in spa_add_l2cache() local
3170 vd = NULL; in spa_add_l2cache()
3174 vd = spa->spa_l2cache.sav_vdevs[j]; in spa_add_l2cache()
3178 ASSERT(vd != NULL); in spa_add_l2cache()
3183 vdev_get_stats(vd, vs); in spa_add_l2cache()
3310 vdev_t *vd; in spa_validate_aux_devs() local
3339 if ((error = spa_config_parse(spa, &vd, dev[i], NULL, 0, in spa_validate_aux_devs()
3343 if (!vd->vdev_ops->vdev_op_leaf) { in spa_validate_aux_devs()
3344 vdev_free(vd); in spa_validate_aux_devs()
3355 strcmp(vd->vdev_ops->vdev_op_type, VDEV_TYPE_DISK) != 0) { in spa_validate_aux_devs()
3357 vdev_free(vd); in spa_validate_aux_devs()
3361 vd->vdev_top = vd; in spa_validate_aux_devs()
3363 if ((error = vdev_open(vd)) == 0 && in spa_validate_aux_devs()
3364 (error = vdev_label_init(vd, crtxg, label)) == 0) { in spa_validate_aux_devs()
3366 vd->vdev_guid) == 0); in spa_validate_aux_devs()
3369 vdev_free(vd); in spa_validate_aux_devs()
3454 vdev_t *vd; in spa_l2cache_drop() local
3461 vd = sav->sav_vdevs[i]; in spa_l2cache_drop()
3462 ASSERT(vd != NULL); in spa_l2cache_drop()
3464 if (spa_l2cache_exists(vd->vdev_guid, &pool) && in spa_l2cache_drop()
3465 pool != 0ULL && l2arc_vdev_present(vd)) in spa_l2cache_drop()
3466 l2arc_remove_vdev(vd); in spa_l2cache_drop()
3765 spa_alt_rootvdev(vdev_t *vd, vdev_t **avd, uint64_t *txg) in spa_alt_rootvdev() argument
3767 for (int c = 0; c < vd->vdev_children; c++) in spa_alt_rootvdev()
3768 spa_alt_rootvdev(vd->vdev_child[c], avd, txg); in spa_alt_rootvdev()
3770 if (vd->vdev_ops->vdev_op_leaf) { in spa_alt_rootvdev()
3774 if (vdev_disk_read_rootlabel(vd->vdev_physpath, vd->vdev_devid, in spa_alt_rootvdev()
3786 *avd = vd; in spa_alt_rootvdev()
4348 vdev_t *vd, *tvd; in spa_vdev_add() local
4356 if ((error = spa_config_parse(spa, &vd, nvroot, NULL, 0, in spa_vdev_add()
4360 spa->spa_pending_vdev = vd; /* spa_vdev_exit() will clear this */ in spa_vdev_add()
4370 if (vd->vdev_children == 0 && nspares == 0 && nl2cache == 0) in spa_vdev_add()
4371 return (spa_vdev_exit(spa, vd, txg, EINVAL)); in spa_vdev_add()
4373 if (vd->vdev_children != 0 && in spa_vdev_add()
4374 (error = vdev_create(vd, txg, B_FALSE)) != 0) in spa_vdev_add()
4375 return (spa_vdev_exit(spa, vd, txg, error)); in spa_vdev_add()
4382 return (spa_vdev_exit(spa, vd, txg, error)); in spa_vdev_add()
4387 for (int c = 0; c < vd->vdev_children; c++) { in spa_vdev_add()
4398 tvd = vd->vdev_child[c]; in spa_vdev_add()
4399 vdev_remove_child(vd, tvd); in spa_vdev_add()
4432 (void) spa_vdev_exit(spa, vd, txg, 0); in spa_vdev_add()
4662 vdev_t *vd, *pvd, *cvd, *tvd; in spa_vdev_detach() local
4671 vd = spa_lookup_by_guid(spa, guid, B_FALSE); in spa_vdev_detach()
4673 if (vd == NULL) in spa_vdev_detach()
4676 if (!vd->vdev_ops->vdev_op_leaf) in spa_vdev_detach()
4679 pvd = vd->vdev_parent; in spa_vdev_detach()
4719 if (vdev_dtl_required(vd)) in spa_vdev_detach()
4729 if (pvd->vdev_ops == &vdev_replacing_ops && vd->vdev_id > 0 && in spa_vdev_detach()
4730 vd->vdev_path != NULL) { in spa_vdev_detach()
4731 size_t len = strlen(vd->vdev_path); in spa_vdev_detach()
4736 if (cvd == vd || cvd->vdev_path == NULL) in spa_vdev_detach()
4739 if (strncmp(cvd->vdev_path, vd->vdev_path, len) == 0 && in spa_vdev_detach()
4742 cvd->vdev_path = spa_strdup(vd->vdev_path); in spa_vdev_detach()
4754 vd->vdev_id == 0 && in spa_vdev_detach()
4766 error = vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); in spa_vdev_detach()
4771 vdev_remove_child(pvd, vd); in spa_vdev_detach()
4839 vdpath = spa_strdup(vd->vdev_path); in spa_vdev_detach()
4841 (void) txg_list_remove_this(&tvd->vdev_dtl_list, vd, t); in spa_vdev_detach()
4842 vd->vdev_detached = B_TRUE; in spa_vdev_detach()
4843 vdev_dirty(tvd, VDD_DTL, vd, txg); in spa_vdev_detach()
4845 spa_event_notify(spa, vd, ESC_ZFS_VDEV_REMOVE); in spa_vdev_detach()
4850 error = spa_vdev_exit(spa, vd, txg, 0); in spa_vdev_detach()
4939 vdev_t *vd = rvd->vdev_child[c]; in spa_vdev_split_mirror() local
4942 if (vd->vdev_islog || vd->vdev_ishole) { in spa_vdev_split_mirror()
5216 spa_vdev_remove_evacuate(spa_t *spa, vdev_t *vd) in spa_vdev_remove_evacuate() argument
5223 ASSERT(vd == vd->vdev_top); in spa_vdev_remove_evacuate()
5231 if (vd->vdev_islog) { in spa_vdev_remove_evacuate()
5232 if (vd->vdev_stat.vs_alloc != 0) in spa_vdev_remove_evacuate()
5245 ASSERT0(vd->vdev_stat.vs_alloc); in spa_vdev_remove_evacuate()
5247 vd->vdev_removing = B_TRUE; in spa_vdev_remove_evacuate()
5248 vdev_dirty_leaves(vd, VDD_DTL, txg); in spa_vdev_remove_evacuate()
5249 vdev_config_dirty(vd); in spa_vdev_remove_evacuate()
5259 spa_vdev_remove_from_namespace(spa_t *spa, vdev_t *vd) in spa_vdev_remove_from_namespace() argument
5262 uint64_t id = vd->vdev_id; in spa_vdev_remove_from_namespace()
5267 ASSERT(vd == vd->vdev_top); in spa_vdev_remove_from_namespace()
5272 if (vd->vdev_stat.vs_alloc != 0) in spa_vdev_remove_from_namespace()
5275 (void) vdev_label_init(vd, 0, VDEV_LABEL_REMOVE); in spa_vdev_remove_from_namespace()
5277 if (list_link_active(&vd->vdev_state_dirty_node)) in spa_vdev_remove_from_namespace()
5278 vdev_state_clean(vd); in spa_vdev_remove_from_namespace()
5279 if (list_link_active(&vd->vdev_config_dirty_node)) in spa_vdev_remove_from_namespace()
5280 vdev_config_clean(vd); in spa_vdev_remove_from_namespace()
5282 vdev_free(vd); in spa_vdev_remove_from_namespace()
5287 vd = vdev_alloc_common(spa, id, 0, &vdev_hole_ops); in spa_vdev_remove_from_namespace()
5288 vdev_add_child(rvd, vd); in spa_vdev_remove_from_namespace()
5313 vdev_t *vd; in spa_vdev_remove() local
5326 vd = spa_lookup_by_guid(spa, guid, B_FALSE); in spa_vdev_remove()
5336 if (vd == NULL || unspare) { in spa_vdev_remove()
5355 } else if (vd != NULL && vd->vdev_islog) { in spa_vdev_remove()
5357 ASSERT(vd == vd->vdev_top); in spa_vdev_remove()
5359 mg = vd->vdev_mg; in spa_vdev_remove()
5376 error = spa_vdev_remove_evacuate(spa, vd); in spa_vdev_remove()
5391 spa_vdev_remove_from_namespace(spa, vd); in spa_vdev_remove()
5393 } else if (vd != NULL) { in spa_vdev_remove()
5416 spa_vdev_resilver_done_hunt(vdev_t *vd) in spa_vdev_resilver_done_hunt() argument
5420 for (int c = 0; c < vd->vdev_children; c++) { in spa_vdev_resilver_done_hunt()
5421 oldvd = spa_vdev_resilver_done_hunt(vd->vdev_child[c]); in spa_vdev_resilver_done_hunt()
5434 if (vd->vdev_ops == &vdev_replacing_ops) { in spa_vdev_resilver_done_hunt()
5435 ASSERT(vd->vdev_children > 1); in spa_vdev_resilver_done_hunt()
5437 newvd = vd->vdev_child[vd->vdev_children - 1]; in spa_vdev_resilver_done_hunt()
5438 oldvd = vd->vdev_child[0]; in spa_vdev_resilver_done_hunt()
5449 if (vd->vdev_ops == &vdev_spare_ops) { in spa_vdev_resilver_done_hunt()
5450 vdev_t *first = vd->vdev_child[0]; in spa_vdev_resilver_done_hunt()
5451 vdev_t *last = vd->vdev_child[vd->vdev_children - 1]; in spa_vdev_resilver_done_hunt()
5476 if (vd->vdev_children > 2) { in spa_vdev_resilver_done_hunt()
5477 newvd = vd->vdev_child[1]; in spa_vdev_resilver_done_hunt()
5493 vdev_t *vd, *pvd, *ppvd; in spa_vdev_resilver_done() local
5498 while ((vd = spa_vdev_resilver_done_hunt(spa->spa_root_vdev)) != NULL) { in spa_vdev_resilver_done()
5499 pvd = vd->vdev_parent; in spa_vdev_resilver_done()
5501 guid = vd->vdev_guid; in spa_vdev_resilver_done()
5515 ASSERT(vd->vdev_resilver_txg == 0 || !vdev_dtl_required(vd)); in spa_vdev_resilver_done()
5535 vdev_t *vd; in spa_vdev_set_common() local
5542 if ((vd = spa_lookup_by_guid(spa, guid, B_TRUE)) == NULL) in spa_vdev_set_common()
5545 if (!vd->vdev_ops->vdev_op_leaf) in spa_vdev_set_common()
5549 if (strcmp(value, vd->vdev_path) != 0) { in spa_vdev_set_common()
5550 spa_strfree(vd->vdev_path); in spa_vdev_set_common()
5551 vd->vdev_path = spa_strdup(value); in spa_vdev_set_common()
5555 if (vd->vdev_fru == NULL) { in spa_vdev_set_common()
5556 vd->vdev_fru = spa_strdup(value); in spa_vdev_set_common()
5558 } else if (strcmp(value, vd->vdev_fru) != 0) { in spa_vdev_set_common()
5559 spa_strfree(vd->vdev_fru); in spa_vdev_set_common()
5560 vd->vdev_fru = spa_strdup(value); in spa_vdev_set_common()
5565 return (spa_vdev_state_exit(spa, sync ? vd : NULL, 0)); in spa_vdev_set_common()
5623 spa_async_remove(spa_t *spa, vdev_t *vd) in spa_async_remove() argument
5625 if (vd->vdev_remove_wanted) { in spa_async_remove()
5626 vd->vdev_remove_wanted = B_FALSE; in spa_async_remove()
5627 vd->vdev_delayed_close = B_FALSE; in spa_async_remove()
5628 vdev_set_state(vd, B_FALSE, VDEV_STATE_REMOVED, VDEV_AUX_NONE); in spa_async_remove()
5636 vd->vdev_stat.vs_read_errors = 0; in spa_async_remove()
5637 vd->vdev_stat.vs_write_errors = 0; in spa_async_remove()
5638 vd->vdev_stat.vs_checksum_errors = 0; in spa_async_remove()
5640 vdev_state_dirty(vd->vdev_top); in spa_async_remove()
5643 for (int c = 0; c < vd->vdev_children; c++) in spa_async_remove()
5644 spa_async_remove(spa, vd->vdev_child[c]); in spa_async_remove()
5648 spa_async_probe(spa_t *spa, vdev_t *vd) in spa_async_probe() argument
5650 if (vd->vdev_probe_wanted) { in spa_async_probe()
5651 vd->vdev_probe_wanted = B_FALSE; in spa_async_probe()
5652 vdev_reopen(vd); /* vdev_open() does the actual probe */ in spa_async_probe()
5655 for (int c = 0; c < vd->vdev_children; c++) in spa_async_probe()
5656 spa_async_probe(spa, vd->vdev_child[c]); in spa_async_probe()
5660 spa_async_autoexpand(spa_t *spa, vdev_t *vd) in spa_async_autoexpand() argument
5669 for (int c = 0; c < vd->vdev_children; c++) { in spa_async_autoexpand()
5670 vdev_t *cvd = vd->vdev_child[c]; in spa_async_autoexpand()
5674 if (!vd->vdev_ops->vdev_op_leaf || vd->vdev_physpath == NULL) in spa_async_autoexpand()
5678 (void) snprintf(physpath, MAXPATHLEN, "/devices%s", vd->vdev_physpath); in spa_async_autoexpand()
6236 vdev_t *vd; in spa_sync() local
6265 while ((vd = list_head(&spa->spa_state_dirty_list)) != NULL) { in spa_sync()
6266 vdev_state_clean(vd); in spa_sync()
6267 vdev_config_dirty(vd); in spa_sync()
6289 vd = rvd->vdev_child[i]; in spa_sync()
6290 if (vd->vdev_deflate_ratio != SPA_MINBLOCKSIZE) in spa_sync()
6330 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, txg)) in spa_sync()
6331 vdev_sync(vd, txg); in spa_sync()
6390 vd = rvd->vdev_child[(c0 + c) % children]; in spa_sync()
6391 if (vd->vdev_ms_array == 0 || vd->vdev_islog) in spa_sync()
6393 svd[svdcount++] = vd; in spa_sync()
6426 while ((vd = list_head(&spa->spa_config_dirty_list)) != NULL) in spa_sync()
6427 vdev_config_clean(vd); in spa_sync()
6446 while (vd = txg_list_remove(&spa->spa_vdev_txg_list, TXG_CLEAN(txg))) in spa_sync()
6447 vdev_sync_done(vd, txg); in spa_sync()
6537 vdev_t *vd; in spa_lookup_by_guid() local
6540 if ((vd = vdev_lookup_by_guid(spa->spa_root_vdev, guid)) != NULL) in spa_lookup_by_guid()
6541 return (vd); in spa_lookup_by_guid()
6545 vd = spa->spa_l2cache.sav_vdevs[i]; in spa_lookup_by_guid()
6546 if (vd->vdev_guid == guid) in spa_lookup_by_guid()
6547 return (vd); in spa_lookup_by_guid()
6551 vd = spa->spa_spares.sav_vdevs[i]; in spa_lookup_by_guid()
6552 if (vd->vdev_guid == guid) in spa_lookup_by_guid()
6553 return (vd); in spa_lookup_by_guid()
6632 spa_event_notify(spa_t *spa, vdev_t *vd, const char *name) in spa_event_notify() argument
6653 if (vd) { in spa_event_notify()
6655 value.value.sv_uint64 = vd->vdev_guid; in spa_event_notify()
6660 if (vd->vdev_path) { in spa_event_notify()
6662 value.value.sv_string = vd->vdev_path; in spa_event_notify()