Esempio n. 1
0
static void
vdev_mirror_scrub_done(zio_t *zio)
{
	mirror_child_t *mc = zio->io_private;

	if (zio->io_error == 0) {
		zio_t *pio;

		mutex_enter(&zio->io_lock);
		while ((pio = zio_walk_parents(zio)) != NULL) {
			mutex_enter(&pio->io_lock);
			ASSERT3U(zio->io_size, >=, pio->io_size);
			bcopy(zio->io_data, pio->io_data, pio->io_size);
			mutex_exit(&pio->io_lock);
		}
		mutex_exit(&zio->io_lock);
	}
Esempio n. 2
0
static void
vdev_queue_agg_io_done(zio_t *aio)
{
	vdev_queue_t *vq = &aio->io_vd->vdev_queue;
	vdev_io_t *vi = aio->io_data;

	if (aio->io_type == ZIO_TYPE_READ) {
		zio_t *pio;
		while ((pio = zio_walk_parents(aio)) != NULL) {
			bcopy((char *)aio->io_data + (pio->io_offset -
			    aio->io_offset), pio->io_data, pio->io_size);
		}
	}

	mutex_enter(&vq->vq_lock);
	list_insert_tail(&vq->vq_io_list, vi);
	mutex_exit(&vq->vq_lock);
}