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 };
|