Lines Matching refs:vdev

411 vdev_read_phys(vdev_t *vdev, const blkptr_t *bp, void *buf,
417 if (!vdev->v_phys_read)
427 rc = vdev->v_phys_read(vdev, vdev->v_read_priv, offset, buf, psize);
430 if (bp && zio_checksum_verify(vdev->spa, bp, buf))
437 vdev_disk_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
441 return (vdev_read_phys(vdev, bp, buf,
447 vdev_mirror_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
454 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
466 vdev_replacing_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
478 kid = STAILQ_FIRST(&vdev->v_children);
489 vdev_t *vdev;
491 STAILQ_FOREACH(vdev, &zfs_vdevs, v_alllink)
492 if (vdev->v_guid == guid)
493 return (vdev);
501 vdev_t *vdev;
503 vdev = malloc(sizeof(vdev_t));
504 memset(vdev, 0, sizeof(vdev_t));
505 STAILQ_INIT(&vdev->v_children);
506 vdev->v_guid = guid;
507 vdev->v_state = VDEV_STATE_OFFLINE;
508 vdev->v_read = _read;
509 vdev->v_phys_read = 0;
510 vdev->v_read_priv = 0;
511 STAILQ_INSERT_TAIL(&zfs_vdevs, vdev, v_alllink);
513 return (vdev);
524 vdev_t *vdev, *kid;
534 printf("ZFS: can't find vdev details\n");
562 vdev = vdev_find(guid);
563 if (!vdev) {
567 vdev = vdev_create(guid, vdev_mirror_read);
569 vdev = vdev_create(guid, vdev_raidz_read);
571 vdev = vdev_create(guid, vdev_replacing_read);
573 vdev = vdev_create(guid, vdev_disk_read);
575 vdev->v_id = id;
576 vdev->v_top = pvdev != NULL ? pvdev : vdev;
579 vdev->v_ashift = ashift;
581 vdev->v_ashift = 0;
585 vdev->v_nparity = nparity;
587 vdev->v_nparity = 0;
593 vdev->v_name = strdup(path);
596 if (vdev->v_nparity == 1)
597 vdev->v_name = "raidz1";
598 else if (vdev->v_nparity == 2)
599 vdev->v_name = "raidz2";
600 else if (vdev->v_nparity == 3)
601 vdev->v_name = "raidz3";
607 vdev->v_name = strdup(type);
616 * This is either new vdev or we've already seen this vdev,
617 * but from an older vdev label, so let's refresh its state
621 vdev->v_state = VDEV_STATE_OFFLINE;
623 vdev->v_state = VDEV_STATE_REMOVED;
625 vdev->v_state = VDEV_STATE_FAULTED;
627 vdev->v_state = VDEV_STATE_DEGRADED;
629 vdev->v_state = VDEV_STATE_CANT_OPEN;
638 vdev->v_nchildren = nkids;
640 rc = vdev_init_from_nvlist(kids, vdev, &kid, is_newer);
644 STAILQ_INSERT_TAIL(&vdev->v_children, kid,
649 vdev->v_nchildren = 0;
653 *vdevp = vdev;
658 vdev_set_state(vdev_t *vdev)
669 if (STAILQ_FIRST(&vdev->v_children)) {
672 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
679 vdev->v_state = VDEV_STATE_HEALTHY;
681 if (vdev->v_read == vdev_mirror_read) {
683 vdev->v_state = VDEV_STATE_DEGRADED;
685 vdev->v_state = VDEV_STATE_OFFLINE;
687 } else if (vdev->v_read == vdev_raidz_read) {
688 if (bad_kids > vdev->v_nparity) {
689 vdev->v_state = VDEV_STATE_OFFLINE;
691 vdev->v_state = VDEV_STATE_DEGRADED;
733 vdev_t *vdev;
740 vdev = STAILQ_FIRST(&spa->spa_vdevs);
741 if (vdev == NULL)
743 for (kid = STAILQ_FIRST(&vdev->v_children); kid != NULL;
744 kid = STAILQ_FIRST(&vdev->v_children))
745 vdev = kid;
746 return (vdev);
823 vdev_status(vdev_t *vdev, int indent)
827 ret = print_state(indent, vdev->v_name, vdev->v_state);
831 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
844 vdev_t *vdev;
872 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
873 if (vdev->v_state == VDEV_STATE_HEALTHY)
875 else if (vdev->v_state == VDEV_STATE_DEGRADED)
890 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
891 ret = vdev_status(vdev, 1);
938 vdev_t *vdev, *top_vdev, *pool_vdev;
955 * Load the vdev label and figure out which
1073 * Get the vdev tree and create our in-core copy of it.
1074 * If we already have a vdev with this guid, this must
1082 vdev = vdev_find(guid);
1083 if (vdev && vdev->v_phys_read) /* Has this vdev already been inited? */
1096 * Add the toplevel vdev to the pool if its not already there.
1107 * We should already have created an incomplete vdev for this
1108 * vdev. Find it and initialise it with our read proc.
1110 vdev = vdev_find(guid);
1111 if (vdev) {
1112 vdev->v_phys_read = _read;
1113 vdev->v_read_priv = read_priv;
1114 vdev->v_state = VDEV_STATE_HEALTHY;
1121 * Re-evaluate top-level vdev state.
1130 upbuf = zfs_alloc(VDEV_UBERBLOCK_SIZE(vdev));
1133 for (i = 0; i < VDEV_UBERBLOCK_COUNT(vdev); i++) {
1135 VDEV_UBERBLOCK_OFFSET(vdev, i));
1138 BP_SET_LSIZE(&bp, VDEV_UBERBLOCK_SIZE(vdev));
1139 BP_SET_PSIZE(&bp, VDEV_UBERBLOCK_SIZE(vdev));
1144 if (vdev_read_phys(vdev, &bp, upbuf, off, 0))
1159 zfs_free(upbuf, VDEV_UBERBLOCK_SIZE(vdev));
1161 vdev->spa = spa;
1255 vdev_t *vdev;
1264 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
1265 if (vdev->v_id == vdevid)
1268 if (!vdev || !vdev->v_read)
1272 if (vdev->v_read == vdev_raidz_read) {
1273 align = 1ULL << vdev->v_top->v_ashift;
1285 error = vdev->v_read(vdev, bp, pbuf, offset, size);