Lines Matching refs:vdev

399 vdev_read_phys(vdev_t *vdev, const blkptr_t *bp, void *buf,
405 if (!vdev->v_phys_read)
415 rc = vdev->v_phys_read(vdev, vdev->v_read_priv, offset, buf, psize);
425 vdev_disk_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
429 return (vdev_read_phys(vdev, bp, buf,
435 vdev_mirror_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
442 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
454 vdev_replacing_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
466 kid = STAILQ_FIRST(&vdev->v_children);
477 vdev_t *vdev;
479 STAILQ_FOREACH(vdev, &zfs_vdevs, v_alllink)
480 if (vdev->v_guid == guid)
481 return (vdev);
489 vdev_t *vdev;
491 vdev = malloc(sizeof(vdev_t));
492 memset(vdev, 0, sizeof(vdev_t));
493 STAILQ_INIT(&vdev->v_children);
494 vdev->v_guid = guid;
495 vdev->v_state = VDEV_STATE_OFFLINE;
496 vdev->v_read = read;
497 vdev->v_phys_read = 0;
498 vdev->v_read_priv = 0;
499 STAILQ_INSERT_TAIL(&zfs_vdevs, vdev, v_alllink);
501 return (vdev);
512 vdev_t *vdev, *kid;
523 printf("ZFS: can't find vdev details\n");
551 vdev = vdev_find(guid);
552 if (!vdev) {
556 vdev = vdev_create(guid, vdev_mirror_read);
558 vdev = vdev_create(guid, vdev_raidz_read);
560 vdev = vdev_create(guid, vdev_replacing_read);
562 vdev = vdev_create(guid, vdev_disk_read);
564 vdev->v_id = id;
565 vdev->v_top = pvdev != NULL ? pvdev : vdev;
568 vdev->v_ashift = ashift;
570 vdev->v_ashift = 0;
573 vdev->v_nparity = nparity;
575 vdev->v_nparity = 0;
580 vdev->v_name = strdup(path);
583 if (vdev->v_nparity == 1)
584 vdev->v_name = "raidz1";
585 else if (vdev->v_nparity == 2)
586 vdev->v_name = "raidz2";
587 else if (vdev->v_nparity == 3)
588 vdev->v_name = "raidz3";
594 vdev->v_name = strdup(type);
603 * This is either new vdev or we've already seen this vdev,
604 * but from an older vdev label, so let's refresh its state
608 vdev->v_state = VDEV_STATE_OFFLINE;
610 vdev->v_state = VDEV_STATE_REMOVED;
612 vdev->v_state = VDEV_STATE_FAULTED;
614 vdev->v_state = VDEV_STATE_DEGRADED;
616 vdev->v_state = VDEV_STATE_CANT_OPEN;
625 vdev->v_nchildren = nkids;
627 rc = vdev_init_from_nvlist(kids, vdev, &kid, is_newer);
631 STAILQ_INSERT_TAIL(&vdev->v_children, kid,
636 vdev->v_nchildren = 0;
640 *vdevp = vdev;
645 vdev_set_state(vdev_t *vdev)
656 if (STAILQ_FIRST(&vdev->v_children)) {
659 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
666 vdev->v_state = VDEV_STATE_HEALTHY;
668 if (vdev->v_read == vdev_mirror_read) {
670 vdev->v_state = VDEV_STATE_DEGRADED;
672 vdev->v_state = VDEV_STATE_OFFLINE;
674 } else if (vdev->v_read == vdev_raidz_read) {
675 if (bad_kids > vdev->v_nparity) {
676 vdev->v_state = VDEV_STATE_OFFLINE;
678 vdev->v_state = VDEV_STATE_DEGRADED;
720 vdev_t *vdev;
727 vdev = STAILQ_FIRST(&spa->spa_vdevs);
728 if (vdev == NULL)
730 for (kid = STAILQ_FIRST(&vdev->v_children); kid != NULL;
731 kid = STAILQ_FIRST(&vdev->v_children))
732 vdev = kid;
733 return (vdev);
804 vdev_status(vdev_t *vdev, int indent)
807 print_state(indent, vdev->v_name, vdev->v_state);
809 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
819 vdev_t *vdev;
837 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
838 if (vdev->v_state == VDEV_STATE_HEALTHY)
840 else if (vdev->v_state == VDEV_STATE_DEGRADED)
853 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
854 vdev_status(vdev, 1);
878 vdev_t *vdev, *top_vdev, *pool_vdev;
894 * Load the vdev label and figure out which
985 * Get the vdev tree and create our in-core copy of it.
986 * If we already have a vdev with this guid, this must
995 vdev = vdev_find(guid);
996 if (vdev && vdev->v_phys_read) /* Has this vdev already been inited? */
1010 * Add the toplevel vdev to the pool if its not already there.
1019 * We should already have created an incomplete vdev for this
1020 * vdev. Find it and initialise it with our read proc.
1022 vdev = vdev_find(guid);
1023 if (vdev) {
1024 vdev->v_phys_read = read;
1025 vdev->v_read_priv = read_priv;
1026 vdev->v_state = VDEV_STATE_HEALTHY;
1033 * Re-evaluate top-level vdev state.
1042 upbuf = zfs_alloc(VDEV_UBERBLOCK_SIZE(vdev));
1045 i < VDEV_UBERBLOCK_COUNT(vdev);
1047 off = VDEV_UBERBLOCK_OFFSET(vdev, i);
1050 BP_SET_LSIZE(&bp, VDEV_UBERBLOCK_SIZE(vdev));
1051 BP_SET_PSIZE(&bp, VDEV_UBERBLOCK_SIZE(vdev));
1056 if (vdev_read_phys(vdev, &bp, upbuf, off, 0))
1070 zfs_free(upbuf, VDEV_UBERBLOCK_SIZE(vdev));
1137 vdev_t *vdev;
1146 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
1147 if (vdev->v_id == vdevid)
1150 if (!vdev || !vdev->v_read)
1154 if (vdev->v_read == vdev_raidz_read) {
1155 align = 1ULL << vdev->v_top->v_ashift;
1167 error = vdev->v_read(vdev, bp, pbuf, offset, size);