Lines Matching refs:vd

53 vdev_disk_alloc(vdev_t *vd)
57 dvd = vd->vdev_tsd = kmem_zalloc(sizeof (vdev_disk_t), KM_SLEEP);
66 vdev_disk_free(vdev_t *vd)
68 vdev_disk_t *dvd = vd->vdev_tsd;
76 * callbacks and free vd->vdev_tsd.
85 vd->vdev_tsd = NULL;
93 vdev_t *vd = (vdev_t *)arg;
94 vdev_disk_t *dvd = vd->vdev_tsd;
108 * freeing of vd->vdev_tsd to the offline finalize or a reopen.
111 vdev_disk_close(vd);
117 zfs_post_remove(vd->vdev_spa, vd);
118 vd->vdev_remove_wanted = B_TRUE;
119 spa_async_request(vd->vdev_spa, SPA_ASYNC_REMOVE);
129 vdev_t *vd = (vdev_t *)arg;
139 * Clean up the LDI event callbacks and free vd->vdev_tsd.
141 vdev_disk_free(vd);
148 vd->vdev_probe_wanted = B_TRUE;
149 spa_async_request(vd->vdev_spa, SPA_ASYNC_PROBE);
164 vdev_t *vd = (vdev_t *)arg;
176 (void) vdev_degrade(vd->vdev_spa, vd->vdev_guid, 0);
186 vdev_disk_hold(vdev_t *vd)
191 ASSERT(spa_config_held(vd->vdev_spa, SCL_STATE, RW_WRITER));
196 if (vd->vdev_path == NULL || vd->vdev_path[0] != '/')
203 if (vd->vdev_tsd != NULL)
206 if (vd->vdev_wholedisk == -1ULL) {
207 size_t len = strlen(vd->vdev_path) + 3;
210 (void) snprintf(buf, len, "%ss0", vd->vdev_path);
212 (void) ldi_vp_from_name(buf, &vd->vdev_name_vp);
216 if (vd->vdev_name_vp == NULL)
217 (void) ldi_vp_from_name(vd->vdev_path, &vd->vdev_name_vp);
219 if (vd->vdev_devid != NULL &&
220 ddi_devid_str_decode(vd->vdev_devid, &devid, &minor) == 0) {
221 (void) ldi_vp_from_devid(devid, minor, &vd->vdev_devid_vp);
228 vdev_disk_rele(vdev_t *vd)
230 ASSERT(spa_config_held(vd->vdev_spa, SCL_STATE, RW_WRITER));
232 if (vd->vdev_name_vp) {
233 VN_RELE_ASYNC(vd->vdev_name_vp,
234 dsl_pool_vnrele_taskq(vd->vdev_spa->spa_dsl_pool));
235 vd->vdev_name_vp = NULL;
237 if (vd->vdev_devid_vp) {
238 VN_RELE_ASYNC(vd->vdev_devid_vp,
239 dsl_pool_vnrele_taskq(vd->vdev_spa->spa_dsl_pool));
240 vd->vdev_devid_vp = NULL;
255 vdev_disk_open(vdev_t *vd, uint64_t *psize, uint64_t *max_psize,
258 spa_t *spa = vd->vdev_spa;
259 vdev_disk_t *dvd = vd->vdev_tsd;
278 if (vd->vdev_path == NULL || vd->vdev_path[0] != '/') {
279 vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL;
292 * up the LDI event callbacks and free vd->vdev_tsd.
294 vdev_disk_free(vd);
296 ASSERT(vd->vdev_reopening);
302 * Create vd->vdev_tsd.
304 vdev_disk_alloc(vd);
305 dvd = vd->vdev_tsd;
323 if (vd->vdev_devid != NULL) {
324 if (ddi_devid_str_decode(vd->vdev_devid, &dvd->vd_devid,
326 vd->vdev_stat.vs_aux = VDEV_AUX_BAD_LABEL;
333 if (vd->vdev_path != NULL) {
335 if (vd->vdev_wholedisk == -1ULL) {
336 size_t len = strlen(vd->vdev_path) + 3;
339 (void) snprintf(buf, len, "%ss0", vd->vdev_path);
344 spa_strfree(vd->vdev_path);
345 vd->vdev_path = buf;
346 vd->vdev_wholedisk = 1ULL;
357 error = ldi_open_by_name(vd->vdev_path, spa_mode(spa),
364 if (error == 0 && vd->vdev_devid != NULL &&
379 if (error == 0 && vd->vdev_wholedisk == -1ULL)
380 vd->vdev_wholedisk = 0;
387 if (error != 0 && vd->vdev_devid != NULL) {
399 if (vd->vdev_devid != NULL)
402 if (vd->vdev_physpath != NULL &&
403 (dev = ddi_pathname_to_dev_t(vd->vdev_physpath)) != NODEV)
412 if (error && vd->vdev_path != NULL)
413 error = ldi_open_by_name(vd->vdev_path, spa_mode(spa),
418 vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED;
433 "to %s", vd->vdev_path, vd->vdev_devid, vd_devid);
434 spa_strfree(vd->vdev_devid);
435 vd->vdev_devid = spa_strdup(vd_devid);
453 (vd->vdev_physpath == NULL ||
454 strcmp(vd->vdev_physpath, physpath) != 0)) {
455 if (vd->vdev_physpath)
456 spa_strfree(vd->vdev_physpath);
459 vd->vdev_physpath = spa_strdup(physpath);
474 &vdev_disk_off_callb, (void *) vd, &lcb->lcb_id);
485 &vdev_disk_dgrd_callb, (void *) vd, &lcb->lcb_id);
492 vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED;
511 vd->vdev_path);
518 vd->vdev_path, error);
524 if (vd->vdev_wholedisk == 1) {
549 vd->vdev_nowritecache = B_FALSE;
555 vdev_disk_close(vdev_t *vd)
557 vdev_disk_t *dvd = vd->vdev_tsd;
559 if (vd->vdev_reopening || dvd == NULL)
573 (void) ldi_close(dvd->vd_lh, spa_mode(vd->vdev_spa), kcred);
577 vd->vdev_delayed_close = B_FALSE;
580 * don't free vd->vdev_tsd or unregister the callbacks here;
586 vdev_disk_free(vd);
590 vdev_disk_physio(vdev_t *vd, caddr_t data,
593 vdev_disk_t *dvd = vd->vdev_tsd;
602 ASSERT(vd->vdev_ops == &vdev_disk_ops);
690 vdev_t *vd = zio->io_vd;
691 vdev_disk_t *dvd = vd->vdev_tsd;
709 if (!vdev_readable(vd)) {
722 if (vd->vdev_nowritecache) {
784 vdev_t *vd = zio->io_vd;
792 if (zio->io_error == EIO && !vd->vdev_remove_wanted) {
793 vdev_disk_t *dvd = vd->vdev_tsd;
804 zfs_post_remove(zio->io_spa, vd);
805 vd->vdev_remove_wanted = B_TRUE;
807 } else if (!vd->vdev_delayed_close) {
808 vd->vdev_delayed_close = B_TRUE;