450 static void
451 vdev_mirror_state_change(vdev_t *vd, int faulted, int degraded)
452 {
453 if (faulted == vd->vdev_children)
454 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN,
455 VDEV_AUX_NO_REPLICAS);
456 else if (degraded + faulted != 0)
457 vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, VDEV_AUX_NONE);
458 else
459 vdev_set_state(vd, B_FALSE, VDEV_STATE_HEALTHY, VDEV_AUX_NONE);
460 }
461
462 vdev_ops_t vdev_mirror_ops = {
463 vdev_mirror_open,
464 vdev_mirror_close,
465 NULL,
466 vdev_default_asize,
467 vdev_mirror_io_start,
468 vdev_mirror_io_done,
469 vdev_mirror_state_change,
470 VDEV_TYPE_MIRROR, /* name of this vdev type */
471 B_FALSE /* not a leaf vdev */
472 };
473
474 vdev_ops_t vdev_replacing_ops = {
475 vdev_mirror_open,
476 vdev_mirror_close,
477 NULL,
478 vdev_default_asize,
479 vdev_mirror_io_start,
480 vdev_mirror_io_done,
481 vdev_mirror_state_change,
482 VDEV_TYPE_REPLACING, /* name of this vdev type */
483 B_FALSE /* not a leaf vdev */
484 };
485
486 vdev_ops_t vdev_spare_ops = {
487 vdev_mirror_open,
488 vdev_mirror_close,
489 NULL,
490 vdev_default_asize,
491 vdev_mirror_io_start,
492 vdev_mirror_io_done,
493 vdev_mirror_state_change,
494 VDEV_TYPE_SPARE, /* name of this vdev type */
495 B_FALSE /* not a leaf vdev */
496 };
|
450 static void
451 vdev_mirror_state_change(vdev_t *vd, int faulted, int degraded)
452 {
453 if (faulted == vd->vdev_children)
454 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN,
455 VDEV_AUX_NO_REPLICAS);
456 else if (degraded + faulted != 0)
457 vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, VDEV_AUX_NONE);
458 else
459 vdev_set_state(vd, B_FALSE, VDEV_STATE_HEALTHY, VDEV_AUX_NONE);
460 }
461
462 vdev_ops_t vdev_mirror_ops = {
463 vdev_mirror_open,
464 vdev_mirror_close,
465 NULL,
466 vdev_default_asize,
467 vdev_mirror_io_start,
468 vdev_mirror_io_done,
469 vdev_mirror_state_change,
470 NULL,
471 VDEV_TYPE_MIRROR, /* name of this vdev type */
472 B_FALSE /* not a leaf vdev */
473 };
474
475 vdev_ops_t vdev_replacing_ops = {
476 vdev_mirror_open,
477 vdev_mirror_close,
478 NULL,
479 vdev_default_asize,
480 vdev_mirror_io_start,
481 vdev_mirror_io_done,
482 vdev_mirror_state_change,
483 NULL,
484 VDEV_TYPE_REPLACING, /* name of this vdev type */
485 B_FALSE /* not a leaf vdev */
486 };
487
488 vdev_ops_t vdev_spare_ops = {
489 vdev_mirror_open,
490 vdev_mirror_close,
491 NULL,
492 vdev_default_asize,
493 vdev_mirror_io_start,
494 vdev_mirror_io_done,
495 vdev_mirror_state_change,
496 NULL,
497 VDEV_TYPE_SPARE, /* name of this vdev type */
498 B_FALSE /* not a leaf vdev */
499 };
|