Lines Matching refs:vd

97 vdev_disk_alloc(vdev_t *vd)  in vdev_disk_alloc()  argument
101 dvd = vd->vdev_tsd = kmem_zalloc(sizeof (vdev_disk_t), KM_SLEEP); in vdev_disk_alloc()
110 vdev_disk_free(vdev_t *vd) in vdev_disk_free() argument
112 vdev_disk_t *dvd = vd->vdev_tsd; in vdev_disk_free()
129 vd->vdev_tsd = NULL; in vdev_disk_free()
136 vdev_t *vd = (vdev_t *)arg; in vdev_disk_off_notify() local
137 vdev_disk_t *dvd = vd->vdev_tsd; in vdev_disk_off_notify()
156 zfs_post_remove(vd->vdev_spa, vd); in vdev_disk_off_notify()
157 vd->vdev_remove_wanted = B_TRUE; in vdev_disk_off_notify()
158 spa_async_request(vd->vdev_spa, SPA_ASYNC_REMOVE); in vdev_disk_off_notify()
167 vdev_t *vd = (vdev_t *)arg; in vdev_disk_off_finalize() local
180 vd->vdev_probe_wanted = B_TRUE; in vdev_disk_off_finalize()
181 spa_async_request(vd->vdev_spa, SPA_ASYNC_PROBE); in vdev_disk_off_finalize()
195 vdev_t *vd = (vdev_t *)arg; in vdev_disk_dgrd_finalize() local
207 (void) vdev_degrade(vd->vdev_spa, vd->vdev_guid, 0); in vdev_disk_dgrd_finalize()
217 vdev_disk_hold(vdev_t *vd) in vdev_disk_hold() argument
222 ASSERT(spa_config_held(vd->vdev_spa, SCL_STATE, RW_WRITER)); in vdev_disk_hold()
227 if (vd->vdev_path == NULL || vd->vdev_path[0] != '/') in vdev_disk_hold()
234 if (vd->vdev_tsd != NULL) in vdev_disk_hold()
237 if (vd->vdev_wholedisk == -1ULL) { in vdev_disk_hold()
238 size_t len = strlen(vd->vdev_path) + 3; in vdev_disk_hold()
241 (void) snprintf(buf, len, "%ss0", vd->vdev_path); in vdev_disk_hold()
243 (void) ldi_vp_from_name(buf, &vd->vdev_name_vp); in vdev_disk_hold()
247 if (vd->vdev_name_vp == NULL) in vdev_disk_hold()
248 (void) ldi_vp_from_name(vd->vdev_path, &vd->vdev_name_vp); in vdev_disk_hold()
250 if (vd->vdev_devid != NULL && in vdev_disk_hold()
251 ddi_devid_str_decode(vd->vdev_devid, &devid, &minor) == 0) { in vdev_disk_hold()
252 (void) ldi_vp_from_devid(devid, minor, &vd->vdev_devid_vp); in vdev_disk_hold()
259 vdev_disk_rele(vdev_t *vd) in vdev_disk_rele() argument
261 ASSERT(spa_config_held(vd->vdev_spa, SCL_STATE, RW_WRITER)); in vdev_disk_rele()
263 if (vd->vdev_name_vp) { in vdev_disk_rele()
264 VN_RELE_ASYNC(vd->vdev_name_vp, in vdev_disk_rele()
265 dsl_pool_vnrele_taskq(vd->vdev_spa->spa_dsl_pool)); in vdev_disk_rele()
266 vd->vdev_name_vp = NULL; in vdev_disk_rele()
268 if (vd->vdev_devid_vp) { in vdev_disk_rele()
269 VN_RELE_ASYNC(vd->vdev_devid_vp, in vdev_disk_rele()
270 dsl_pool_vnrele_taskq(vd->vdev_spa->spa_dsl_pool)); in vdev_disk_rele()
271 vd->vdev_devid_vp = NULL; in vdev_disk_rele()
286 vdev_disk_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize, in vdev_disk_open() argument
289 spa_t *spa = vd->vdev_spa; in vdev_disk_open()
290 vdev_disk_t *dvd = vd->vdev_tsd; in vdev_disk_open()
309 if (vd->vdev_path == NULL || vd->vdev_path[0] != '/') { in vdev_disk_open()
310 vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL; in vdev_disk_open()
319 ASSERT(vd->vdev_reopening); in vdev_disk_open()
326 vdev_disk_alloc(vd); in vdev_disk_open()
327 dvd = vd->vdev_tsd; in vdev_disk_open()
332 if (vd->vdev_devid != NULL && in vdev_disk_open()
334 vdev_dbgmsg(vd, "vdev_disk_open, devid %s bypassed", in vdev_disk_open()
335 vd->vdev_devid); in vdev_disk_open()
336 spa_strfree(vd->vdev_devid); in vdev_disk_open()
337 vd->vdev_devid = NULL; in vdev_disk_open()
356 if (vd->vdev_devid != NULL) { in vdev_disk_open()
357 if (ddi_devid_str_decode(vd->vdev_devid, &dvd->vd_devid, in vdev_disk_open()
359 vdev_dbgmsg(vd, in vdev_disk_open()
361 vd->vdev_devid); in vdev_disk_open()
362 spa_strfree(vd->vdev_devid); in vdev_disk_open()
363 vd->vdev_devid = NULL; in vdev_disk_open()
380 if (vd->vdev_path != NULL) { in vdev_disk_open()
381 if (vd->vdev_wholedisk == -1ULL) { in vdev_disk_open()
382 size_t len = strlen(vd->vdev_path) + 3; in vdev_disk_open()
385 (void) snprintf(buf, len, "%ss0", vd->vdev_path); in vdev_disk_open()
390 spa_strfree(vd->vdev_path); in vdev_disk_open()
391 vd->vdev_path = buf; in vdev_disk_open()
392 vd->vdev_wholedisk = 1ULL; in vdev_disk_open()
403 error = ldi_open_by_name(vd->vdev_path, spa_mode(spa), in vdev_disk_open()
410 if (error == 0 && vd->vdev_devid != NULL) { in vdev_disk_open()
429 vdev_dbgmsg(vd, "vdev_disk_open: devid " in vdev_disk_open()
430 "mismatch: %s != %s", vd->vdev_devid, in vdev_disk_open()
433 "mismatch: %s != %s", vd->vdev_path, in vdev_disk_open()
434 vd->vdev_devid, devid_str); in vdev_disk_open()
452 if (error == 0 && vd->vdev_wholedisk == -1ULL) in vdev_disk_open()
453 vd->vdev_wholedisk = 0; in vdev_disk_open()
460 if (error != 0 && vd->vdev_devid != NULL) { in vdev_disk_open()
464 vdev_dbgmsg(vd, "Failed to open by devid (%s)", in vdev_disk_open()
465 vd->vdev_devid); in vdev_disk_open()
478 if (vd->vdev_physpath != NULL && in vdev_disk_open()
479 (dev = ddi_pathname_to_dev_t(vd->vdev_physpath)) != NODEV) { in vdev_disk_open()
489 if (error != 0 && vd->vdev_path != NULL) { in vdev_disk_open()
490 error = ldi_open_by_name(vd->vdev_path, spa_mode(spa), in vdev_disk_open()
501 spa_guid(spa), vd->vdev_guid); in vdev_disk_open()
504 vdev_dbgmsg(vd, "Trying alternate preroot path (%s)", in vdev_disk_open()
511 vdev_dbgmsg(vd, "Failed to open by preroot " in vdev_disk_open()
519 vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; in vdev_disk_open()
520 vdev_dbgmsg(vd, "vdev_disk_open: failed to open [error=%d]", in vdev_disk_open()
547 vd->vdev_devid != NULL) { in vdev_disk_open()
580 vdev_dbgmsg(vd, "vdev_disk_open: update devid from " in vdev_disk_open()
582 vd->vdev_devid != NULL ? vd->vdev_devid : "<none>", in vdev_disk_open()
586 vd->vdev_path != NULL ? vd->vdev_path : "?", in vdev_disk_open()
587 vd->vdev_devid != NULL ? vd->vdev_devid : "<none>", in vdev_disk_open()
601 if (vd->vdev_devid != NULL) { in vdev_disk_open()
602 spa_strfree(vd->vdev_devid); in vdev_disk_open()
603 vd->vdev_devid = NULL; in vdev_disk_open()
611 vd->vdev_devid = vd_devid; in vdev_disk_open()
637 (vd->vdev_physpath == NULL || in vdev_disk_open()
638 strcmp(vd->vdev_physpath, physpath) != 0)) { in vdev_disk_open()
639 if (vd->vdev_physpath) in vdev_disk_open()
640 spa_strfree(vd->vdev_physpath); in vdev_disk_open()
643 vd->vdev_physpath = spa_strdup(physpath); in vdev_disk_open()
658 &vdev_disk_off_callb, (void *) vd, &lcb->lcb_id); in vdev_disk_open()
669 &vdev_disk_dgrd_callb, (void *) vd, &lcb->lcb_id); in vdev_disk_open()
677 vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED; in vdev_disk_open()
678 vdev_dbgmsg(vd, "vdev_disk_open: failed to get size"); in vdev_disk_open()
697 vd->vdev_path); in vdev_disk_open()
704 vd->vdev_path, error); in vdev_disk_open()
710 if (vd->vdev_wholedisk == 1) { in vdev_disk_open()
735 vd->vdev_nowritecache = B_FALSE; in vdev_disk_open()
739 vd->vdev_has_trim = B_TRUE; in vdev_disk_open()
741 vd->vdev_has_trim = B_FALSE; in vdev_disk_open()
745 vd->vdev_has_trim = B_FALSE; in vdev_disk_open()
748 vd->vdev_has_securetrim = B_FALSE; in vdev_disk_open()
751 vd->vdev_nonrot = B_FALSE; in vdev_disk_open()
757 vd->vdev_nonrot = B_TRUE; in vdev_disk_open()
764 vdev_disk_close(vdev_t *vd) in vdev_disk_close() argument
766 vdev_disk_t *dvd = vd->vdev_tsd; in vdev_disk_close()
768 if (vd->vdev_reopening || dvd == NULL) in vdev_disk_close()
782 (void) ldi_close(dvd->vd_lh, spa_mode(vd->vdev_spa), kcred); in vdev_disk_close()
786 vd->vdev_delayed_close = B_FALSE; in vdev_disk_close()
787 vdev_disk_free(vd); in vdev_disk_close()
819 vdev_disk_dumpio(vdev_t *vd, caddr_t data, size_t size, in vdev_disk_dumpio() argument
823 vdev_disk_t *dvd = vd->vdev_tsd; in vdev_disk_dumpio()
834 ASSERT(vd->vdev_ops == &vdev_disk_ops); in vdev_disk_dumpio()
903 vdev_t *vd = zio->io_vd; in vdev_disk_io_start() local
904 vdev_disk_t *dvd = vd->vdev_tsd; in vdev_disk_io_start()
924 if (!vdev_readable(vd)) { in vdev_disk_io_start()
937 if (vd->vdev_nowritecache) { in vdev_disk_io_start()
973 if (zfs_no_trim == 1 || !vd->vdev_has_trim) { in vdev_disk_io_start()
997 vd->vdev_has_trim = B_FALSE; in vdev_disk_io_start()
1045 vdev_t *vd = zio->io_vd; in vdev_disk_io_done() local
1053 if (zio->io_error == EIO && !vd->vdev_remove_wanted) { in vdev_disk_io_done()
1054 vdev_disk_t *dvd = vd->vdev_tsd; in vdev_disk_io_done()
1065 zfs_post_remove(zio->io_spa, vd); in vdev_disk_io_done()
1066 vd->vdev_remove_wanted = B_TRUE; in vdev_disk_io_done()
1068 } else if (!vd->vdev_delayed_close) { in vdev_disk_io_done()
1069 vd->vdev_delayed_close = B_TRUE; in vdev_disk_io_done()