Lines Matching refs:vdev

404 vdev_read_phys(vdev_t *vdev, const blkptr_t *bp, void *buf,
410 if (!vdev->v_phys_read)
420 rc = vdev->v_phys_read(vdev, vdev->v_read_priv, offset, buf, psize);
430 vdev_disk_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
434 return (vdev_read_phys(vdev, bp, buf,
440 vdev_mirror_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
447 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
459 vdev_replacing_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
471 kid = STAILQ_FIRST(&vdev->v_children);
482 vdev_t *vdev;
484 STAILQ_FOREACH(vdev, &zfs_vdevs, v_alllink)
485 if (vdev->v_guid == guid)
486 return (vdev);
494 vdev_t *vdev;
496 vdev = malloc(sizeof(vdev_t));
497 memset(vdev, 0, sizeof(vdev_t));
498 STAILQ_INIT(&vdev->v_children);
499 vdev->v_guid = guid;
500 vdev->v_state = VDEV_STATE_OFFLINE;
501 vdev->v_read = vdev_read;
502 vdev->v_phys_read = 0;
503 vdev->v_read_priv = 0;
504 STAILQ_INSERT_TAIL(&zfs_vdevs, vdev, v_alllink);
506 return (vdev);
517 vdev_t *vdev, *kid;
528 printf("ZFS: can't find vdev details\n");
556 vdev = vdev_find(guid);
557 if (!vdev) {
561 vdev = vdev_create(guid, vdev_mirror_read);
563 vdev = vdev_create(guid, vdev_raidz_read);
565 vdev = vdev_create(guid, vdev_replacing_read);
567 vdev = vdev_create(guid, vdev_disk_read);
569 vdev->v_id = id;
570 vdev->v_top = pvdev != NULL ? pvdev : vdev;
573 vdev->v_ashift = ashift;
575 vdev->v_ashift = 0;
578 vdev->v_nparity = nparity;
580 vdev->v_nparity = 0;
585 vdev->v_name = strdup(path);
588 vdev->v_phys_path = strdup(path);
590 vdev->v_phys_path = NULL;
593 vdev->v_devid = strdup(path);
595 vdev->v_devid = NULL;
598 if (vdev->v_nparity == 1)
599 vdev->v_name = "raidz1";
600 else if (vdev->v_nparity == 2)
601 vdev->v_name = "raidz2";
602 else if (vdev->v_nparity == 3)
603 vdev->v_name = "raidz3";
609 vdev->v_name = strdup(type);
618 * This is either new vdev or we've already seen this vdev,
619 * but from an older vdev label, so let's refresh its state
623 vdev->v_state = VDEV_STATE_OFFLINE;
625 vdev->v_state = VDEV_STATE_REMOVED;
627 vdev->v_state = VDEV_STATE_FAULTED;
629 vdev->v_state = VDEV_STATE_DEGRADED;
631 vdev->v_state = VDEV_STATE_CANT_OPEN;
640 vdev->v_nchildren = nkids;
642 rc = vdev_init_from_nvlist(kids, vdev, &kid, is_newer);
646 STAILQ_INSERT_TAIL(&vdev->v_children, kid,
651 vdev->v_nchildren = 0;
655 *vdevp = vdev;
660 vdev_set_state(vdev_t *vdev)
671 if (STAILQ_FIRST(&vdev->v_children)) {
674 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
681 vdev->v_state = VDEV_STATE_HEALTHY;
683 if (vdev->v_read == vdev_mirror_read) {
685 vdev->v_state = VDEV_STATE_DEGRADED;
687 vdev->v_state = VDEV_STATE_OFFLINE;
689 } else if (vdev->v_read == vdev_raidz_read) {
690 if (bad_kids > vdev->v_nparity) {
691 vdev->v_state = VDEV_STATE_OFFLINE;
693 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);
807 vdev_status(vdev_t *vdev, int indent)
811 ret = print_state(indent, vdev->v_name, vdev->v_state);
815 STAILQ_FOREACH(kid, &vdev->v_children, v_childlink) {
828 vdev_t *vdev;
856 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
857 if (vdev->v_state == VDEV_STATE_HEALTHY)
859 else if (vdev->v_state == VDEV_STATE_DEGRADED)
874 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
875 ret = vdev_status(vdev, 1);
908 vdev_t *vdev, *top_vdev, *pool_vdev;
924 * Load the vdev label and figure out which
1015 * Get the vdev tree and create our in-core copy of it.
1016 * If we already have a vdev with this guid, this must
1025 vdev = vdev_find(guid);
1026 if (vdev && vdev->v_phys_read) /* Has this vdev already been inited? */
1040 * Add the toplevel vdev to the pool if its not already there.
1049 * We should already have created an incomplete vdev for this
1050 * vdev. Find it and initialise it with our read proc.
1052 vdev = vdev_find(guid);
1053 if (vdev) {
1054 vdev->v_phys_read = phys_read;
1055 vdev->v_read_priv = read_priv;
1056 vdev->v_state = VDEV_STATE_HEALTHY;
1063 * Re-evaluate top-level vdev state.
1072 upbuf = zfs_alloc(VDEV_UBERBLOCK_SIZE(vdev));
1075 i < VDEV_UBERBLOCK_COUNT(vdev);
1077 off = VDEV_UBERBLOCK_OFFSET(vdev, i);
1080 BP_SET_LSIZE(&bp, VDEV_UBERBLOCK_SIZE(vdev));
1081 BP_SET_PSIZE(&bp, VDEV_UBERBLOCK_SIZE(vdev));
1086 if (vdev_read_phys(vdev, &bp, upbuf, off, 0))
1100 zfs_free(upbuf, VDEV_UBERBLOCK_SIZE(vdev));
1195 vdev_t *vdev;
1204 STAILQ_FOREACH(vdev, &spa->spa_vdevs, v_childlink) {
1205 if (vdev->v_id == vdevid)
1208 if (!vdev || !vdev->v_read)
1212 if (vdev->v_read == vdev_raidz_read) {
1213 align = 1ULL << vdev->v_top->v_ashift;
1225 error = vdev->v_read(vdev, bp, pbuf, offset, size);