Lines Matching defs:zio

33 #include <sys/zio.h>
60 vdev_mirror_map_free(zio_t *zio)
62 mirror_map_t *mm = zio->io_vsd;
73 vdev_mirror_map_alloc(zio_t *zio)
77 vdev_t *vd = zio->io_vd;
81 dva_t *dva = zio->io_bp->blk_dva;
82 spa_t *spa = zio->io_spa;
84 c = BP_GET_NDVAS(zio->io_bp);
118 (zio->io_offset >> vdev_mirror_shift) % c;
124 mc->mc_offset = zio->io_offset;
128 zio->io_vsd = mm;
129 zio->io_vsd_ops = &vdev_mirror_vsd_ops;
177 vdev_mirror_child_done(zio_t *zio)
179 mirror_child_t *mc = zio->io_private;
181 mc->mc_error = zio->io_error;
187 vdev_mirror_scrub_done(zio_t *zio)
189 mirror_child_t *mc = zio->io_private;
191 if (zio->io_error == 0) {
195 mutex_enter(&zio->io_lock);
196 while ((pio = zio_walk_parents(zio, &zl)) != NULL) {
198 ASSERT3U(zio->io_size, >=, pio->io_size);
199 bcopy(zio->io_data, pio->io_data, pio->io_size);
202 mutex_exit(&zio->io_lock);
205 zio_buf_free(zio->io_data, zio->io_size);
207 mc->mc_error = zio->io_error;
217 vdev_mirror_child_select(zio_t *zio)
219 mirror_map_t *mm = zio->io_vsd;
221 uint64_t txg = zio->io_txg;
224 ASSERT(zio->io_bp == NULL || BP_PHYSICAL_BIRTH(zio->io_bp) == txg);
265 vdev_mirror_io_start(zio_t *zio)
271 mm = vdev_mirror_map_alloc(zio);
273 if (zio->io_type == ZIO_TYPE_READ) {
274 if ((zio->io_flags & ZIO_FLAG_SCRUB) && !mm->mm_replacing) {
279 * data into zio->io_data in vdev_mirror_scrub_done.
283 zio_nowait(zio_vdev_child_io(zio, zio->io_bp,
285 zio_buf_alloc(zio->io_size), zio->io_size,
286 zio->io_type, zio->io_priority, 0,
289 zio_execute(zio);
295 c = vdev_mirror_child_select(zio);
298 ASSERT(zio->io_type == ZIO_TYPE_WRITE);
309 zio_nowait(zio_vdev_child_io(zio, zio->io_bp,
310 mc->mc_vd, mc->mc_offset, zio->io_data, zio->io_size,
311 zio->io_type, zio->io_priority, 0,
316 zio_execute(zio);
334 vdev_mirror_io_done(zio_t *zio)
336 mirror_map_t *mm = zio->io_vsd;
353 if (zio->io_type == ZIO_TYPE_WRITE) {
378 if (good_copies == 0 || zio->io_vd == NULL)
379 zio->io_error = vdev_mirror_worst_error(mm);
384 ASSERT(zio->io_type == ZIO_TYPE_READ);
390 if (good_copies == 0 && (c = vdev_mirror_child_select(zio)) != -1) {
393 zio_vdev_io_redone(zio);
394 zio_nowait(zio_vdev_child_io(zio, zio->io_bp,
395 mc->mc_vd, mc->mc_offset, zio->io_data, zio->io_size,
396 ZIO_TYPE_READ, zio->io_priority, 0,
403 zio->io_error = vdev_mirror_worst_error(mm);
404 ASSERT(zio->io_error != 0);
407 if (good_copies && spa_writeable(zio->io_spa) &&
409 (zio->io_flags & ZIO_FLAG_RESILVER) ||
410 ((zio->io_flags & ZIO_FLAG_SCRUB) && mm->mm_replacing))) {
427 if (!(zio->io_flags & ZIO_FLAG_SCRUB) &&
429 zio->io_txg, 1))
434 zio_nowait(zio_vdev_child_io(zio, zio->io_bp,
436 zio->io_data, zio->io_size,