Print this page
expandable RAID-Z


1209                 return (zio_wait_for_children_done(zio));
1210         }
1211 
1212         vdev_raidz_map_free(zio);
1213 
1214         return (ZIO_PIPELINE_CONTINUE);
1215 }
1216 
1217 static void
1218 vdev_raidz_state_change(vdev_t *vd, int faulted, int degraded)
1219 {
1220         if (faulted > vd->vdev_nparity)
1221                 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN,
1222                     VDEV_AUX_NO_REPLICAS);
1223         else if (degraded + faulted != 0)
1224                 vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, VDEV_AUX_NONE);
1225         else
1226                 vdev_set_state(vd, B_FALSE, VDEV_STATE_HEALTHY, VDEV_AUX_NONE);
1227 }
1228 







1229 vdev_ops_t vdev_raidz_ops = {
1230         vdev_raidz_open,
1231         vdev_raidz_close,
1232         NULL,
1233         vdev_raidz_asize,
1234         vdev_raidz_io_start,
1235         vdev_raidz_io_done,
1236         vdev_raidz_state_change,

1237         VDEV_TYPE_RAIDZ,        /* name of this vdev type */
1238         B_FALSE                 /* not a leaf vdev */
1239 };


1209                 return (zio_wait_for_children_done(zio));
1210         }
1211 
1212         vdev_raidz_map_free(zio);
1213 
1214         return (ZIO_PIPELINE_CONTINUE);
1215 }
1216 
1217 static void
1218 vdev_raidz_state_change(vdev_t *vd, int faulted, int degraded)
1219 {
1220         if (faulted > vd->vdev_nparity)
1221                 vdev_set_state(vd, B_FALSE, VDEV_STATE_CANT_OPEN,
1222                     VDEV_AUX_NO_REPLICAS);
1223         else if (degraded + faulted != 0)
1224                 vdev_set_state(vd, B_FALSE, VDEV_STATE_DEGRADED, VDEV_AUX_NONE);
1225         else
1226                 vdev_set_state(vd, B_FALSE, VDEV_STATE_HEALTHY, VDEV_AUX_NONE);
1227 }
1228 
1229 static uint8_t
1230 vdev_raidz_grid(vdev_t *vd)
1231 {
1232         ASSERT(vd->vdev_nparity - 1 <= 1);
1233         return (((vd->vdev_nparity - 1) << 6) | vd->vdev_children);
1234 }
1235 
1236 vdev_ops_t vdev_raidz_ops = {
1237         vdev_raidz_open,
1238         vdev_raidz_close,
1239         NULL,
1240         vdev_raidz_asize,
1241         vdev_raidz_io_start,
1242         vdev_raidz_io_done,
1243         vdev_raidz_state_change,
1244         vdev_raidz_grid,
1245         VDEV_TYPE_RAIDZ,        /* name of this vdev type */
1246         B_FALSE                 /* not a leaf vdev */
1247 };