Lines Matching refs:zio
94 #define IO_IS_ALLOCATING(zio) ((zio)->io_orig_pipeline & ZIO_STAGE_DVA_ALLOCATE) argument
270 zio_push_transform(zio_t *zio, void *data, uint64_t size, uint64_t bufsize, in zio_push_transform() argument
275 zt->zt_orig_data = zio->io_data; in zio_push_transform()
276 zt->zt_orig_size = zio->io_size; in zio_push_transform()
280 zt->zt_next = zio->io_transform_stack; in zio_push_transform()
281 zio->io_transform_stack = zt; in zio_push_transform()
283 zio->io_data = data; in zio_push_transform()
284 zio->io_size = size; in zio_push_transform()
288 zio_pop_transforms(zio_t *zio) in zio_pop_transforms() argument
292 while ((zt = zio->io_transform_stack) != NULL) { in zio_pop_transforms()
294 zt->zt_transform(zio, in zio_pop_transforms()
298 zio_buf_free(zio->io_data, zt->zt_bufsize); in zio_pop_transforms()
300 zio->io_data = zt->zt_orig_data; in zio_pop_transforms()
301 zio->io_size = zt->zt_orig_size; in zio_pop_transforms()
302 zio->io_transform_stack = zt->zt_next; in zio_pop_transforms()
314 zio_subblock(zio_t *zio, void *data, uint64_t size) in zio_subblock() argument
316 ASSERT(zio->io_size > size); in zio_subblock()
318 if (zio->io_type == ZIO_TYPE_READ) in zio_subblock()
319 bcopy(zio->io_data, data, size); in zio_subblock()
323 zio_decompress(zio_t *zio, void *data, uint64_t size) in zio_decompress() argument
325 if (zio->io_error == 0 && in zio_decompress()
326 zio_decompress_data(BP_GET_COMPRESS(zio->io_bp), in zio_decompress()
327 zio->io_data, data, zio->io_size, size) != 0) in zio_decompress()
328 zio->io_error = SET_ERROR(EIO); in zio_decompress()
441 zio_wait_for_children(zio_t *zio, uint8_t childbits, enum zio_wait_type wait) in zio_wait_for_children() argument
445 mutex_enter(&zio->io_lock); in zio_wait_for_children()
446 ASSERT(zio->io_stall == NULL); in zio_wait_for_children()
451 uint64_t *countp = &zio->io_children[c][wait]; in zio_wait_for_children()
453 zio->io_stage >>= 1; in zio_wait_for_children()
454 zio->io_stall = countp; in zio_wait_for_children()
459 mutex_exit(&zio->io_lock); in zio_wait_for_children()
464 zio_notify_parent(zio_t *pio, zio_t *zio, enum zio_wait_type wait) in zio_notify_parent() argument
466 uint64_t *countp = &pio->io_children[zio->io_child_type][wait]; in zio_notify_parent()
467 int *errorp = &pio->io_child_error[zio->io_child_type]; in zio_notify_parent()
470 if (zio->io_error && !(zio->io_flags & ZIO_FLAG_DONT_PROPAGATE)) in zio_notify_parent()
471 *errorp = zio_worst_error(*errorp, zio->io_error); in zio_notify_parent()
472 pio->io_reexecute |= zio->io_reexecute; in zio_notify_parent()
487 zio_inherit_child_errors(zio_t *zio, enum zio_child c) in zio_inherit_child_errors() argument
489 if (zio->io_child_error[c] != 0 && zio->io_error == 0) in zio_inherit_child_errors()
490 zio->io_error = zio->io_child_error[c]; in zio_inherit_child_errors()
505 zio_t *zio; in zio_create() local
515 zio = kmem_cache_alloc(zio_cache, KM_SLEEP); in zio_create()
516 bzero(zio, sizeof (zio_t)); in zio_create()
518 mutex_init(&zio->io_lock, NULL, MUTEX_DEFAULT, NULL); in zio_create()
519 cv_init(&zio->io_cv, NULL, CV_DEFAULT, NULL); in zio_create()
521 list_create(&zio->io_parent_list, sizeof (zio_link_t), in zio_create()
523 list_create(&zio->io_child_list, sizeof (zio_link_t), in zio_create()
527 zio->io_child_type = ZIO_CHILD_VDEV; in zio_create()
529 zio->io_child_type = ZIO_CHILD_GANG; in zio_create()
531 zio->io_child_type = ZIO_CHILD_DDT; in zio_create()
533 zio->io_child_type = ZIO_CHILD_LOGICAL; in zio_create()
536 zio->io_bp = (blkptr_t *)bp; in zio_create()
537 zio->io_bp_copy = *bp; in zio_create()
538 zio->io_bp_orig = *bp; in zio_create()
540 zio->io_child_type == ZIO_CHILD_DDT) in zio_create()
541 zio->io_bp = &zio->io_bp_copy; /* so caller can free */ in zio_create()
542 if (zio->io_child_type == ZIO_CHILD_LOGICAL) in zio_create()
543 zio->io_logical = zio; in zio_create()
544 if (zio->io_child_type > ZIO_CHILD_GANG && BP_IS_GANG(bp)) in zio_create()
548 zio->io_spa = spa; in zio_create()
549 zio->io_txg = txg; in zio_create()
550 zio->io_done = done; in zio_create()
551 zio->io_private = private; in zio_create()
552 zio->io_type = type; in zio_create()
553 zio->io_priority = priority; in zio_create()
554 zio->io_vd = vd; in zio_create()
555 zio->io_offset = offset; in zio_create()
556 zio->io_orig_data = zio->io_data = data; in zio_create()
557 zio->io_orig_size = zio->io_size = size; in zio_create()
558 zio->io_orig_flags = zio->io_flags = flags; in zio_create()
559 zio->io_orig_stage = zio->io_stage = stage; in zio_create()
560 zio->io_orig_pipeline = zio->io_pipeline = pipeline; in zio_create()
562 zio->io_state[ZIO_WAIT_READY] = (stage >= ZIO_STAGE_READY); in zio_create()
563 zio->io_state[ZIO_WAIT_DONE] = (stage >= ZIO_STAGE_DONE); in zio_create()
566 zio->io_bookmark = *zb; in zio_create()
569 if (zio->io_logical == NULL) in zio_create()
570 zio->io_logical = pio->io_logical; in zio_create()
571 if (zio->io_child_type == ZIO_CHILD_GANG) in zio_create()
572 zio->io_gang_leader = pio->io_gang_leader; in zio_create()
573 zio_add_child(pio, zio); in zio_create()
576 return (zio); in zio_create()
580 zio_destroy(zio_t *zio) in zio_destroy() argument
582 list_destroy(&zio->io_parent_list); in zio_destroy()
583 list_destroy(&zio->io_child_list); in zio_destroy()
584 mutex_destroy(&zio->io_lock); in zio_destroy()
585 cv_destroy(&zio->io_cv); in zio_destroy()
586 kmem_cache_free(zio_cache, zio); in zio_destroy()
593 zio_t *zio; in zio_null() local
595 zio = zio_create(pio, spa, 0, NULL, NULL, 0, done, private, in zio_null()
599 return (zio); in zio_null()
695 zio_t *zio; in zio_read() local
699 zio = zio_create(pio, spa, BP_PHYSICAL_BIRTH(bp), bp, in zio_read()
705 return (zio); in zio_read()
715 zio_t *zio; in zio_write() local
726 zio = zio_create(pio, spa, txg, bp, data, size, done, private, in zio_write()
731 zio->io_ready = ready; in zio_write()
732 zio->io_physdone = physdone; in zio_write()
733 zio->io_prop = *zp; in zio_write()
741 if (data == NULL && zio->io_prop.zp_dedup_verify) { in zio_write()
742 zio->io_prop.zp_dedup = zio->io_prop.zp_dedup_verify = B_FALSE; in zio_write()
745 return (zio); in zio_write()
753 zio_t *zio; in zio_rewrite() local
755 zio = zio_create(pio, spa, txg, bp, data, size, done, private, in zio_rewrite()
759 return (zio); in zio_rewrite()
763 zio_write_override(zio_t *zio, blkptr_t *bp, int copies, boolean_t nopwrite) in zio_write_override() argument
765 ASSERT(zio->io_type == ZIO_TYPE_WRITE); in zio_write_override()
766 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_override()
767 ASSERT(zio->io_stage == ZIO_STAGE_OPEN); in zio_write_override()
768 ASSERT(zio->io_txg == spa_syncing_txg(zio->io_spa)); in zio_write_override()
775 zio->io_prop.zp_dedup = nopwrite ? B_FALSE : zio->io_prop.zp_dedup; in zio_write_override()
776 zio->io_prop.zp_nopwrite = nopwrite; in zio_write_override()
777 zio->io_prop.zp_copies = copies; in zio_write_override()
778 zio->io_bp_override = bp; in zio_write_override()
813 zio_t *zio; in zio_free_sync() local
834 zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), in zio_free_sync()
838 return (zio); in zio_free_sync()
845 zio_t *zio; in zio_claim() local
868 zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), in zio_claim()
872 return (zio); in zio_claim()
879 zio_t *zio; in zio_ioctl() local
883 zio = zio_create(pio, spa, 0, NULL, NULL, 0, done, private, in zio_ioctl()
887 zio->io_cmd = cmd; in zio_ioctl()
889 zio = zio_null(pio, spa, NULL, NULL, NULL, flags); in zio_ioctl()
892 zio_nowait(zio_ioctl(zio, spa, vd->vdev_child[c], cmd, in zio_ioctl()
896 return (zio); in zio_ioctl()
904 zio_t *zio; in zio_read_phys() local
911 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, done, private, in zio_read_phys()
915 zio->io_prop.zp_checksum = checksum; in zio_read_phys()
917 return (zio); in zio_read_phys()
925 zio_t *zio; in zio_write_phys() local
932 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, done, private, in zio_write_phys()
936 zio->io_prop.zp_checksum = checksum; in zio_write_phys()
947 zio_push_transform(zio, wbuf, size, size, NULL); in zio_write_phys()
950 return (zio); in zio_write_phys()
962 zio_t *zio; in zio_vdev_child_io() local
990 zio = zio_create(pio, pio->io_spa, pio->io_txg, bp, data, size, in zio_vdev_child_io()
994 zio->io_physdone = pio->io_physdone; in zio_vdev_child_io()
995 if (vd->vdev_ops->vdev_op_leaf && zio->io_logical != NULL) in zio_vdev_child_io()
996 zio->io_logical->io_phys_children++; in zio_vdev_child_io()
998 return (zio); in zio_vdev_child_io()
1006 zio_t *zio; in zio_vdev_delegated_io() local
1010 zio = zio_create(NULL, vd->vdev_spa, 0, NULL, in zio_vdev_delegated_io()
1016 return (zio); in zio_vdev_delegated_io()
1020 zio_flush(zio_t *zio, vdev_t *vd) in zio_flush() argument
1022 zio_nowait(zio_ioctl(zio, zio->io_spa, vd, DKIOCFLUSHWRITECACHE, in zio_flush()
1028 zio_shrink(zio_t *zio, uint64_t size) in zio_shrink() argument
1030 ASSERT(zio->io_executor == NULL); in zio_shrink()
1031 ASSERT(zio->io_orig_size == zio->io_size); in zio_shrink()
1032 ASSERT(size <= zio->io_size); in zio_shrink()
1039 ASSERT(BP_GET_COMPRESS(zio->io_bp) == ZIO_COMPRESS_OFF); in zio_shrink()
1040 if (!BP_IS_RAIDZ(zio->io_bp)) in zio_shrink()
1041 zio->io_orig_size = zio->io_size = size; in zio_shrink()
1051 zio_read_bp_init(zio_t *zio) in zio_read_bp_init() argument
1053 blkptr_t *bp = zio->io_bp; in zio_read_bp_init()
1056 zio->io_child_type == ZIO_CHILD_LOGICAL && in zio_read_bp_init()
1057 !(zio->io_flags & ZIO_FLAG_RAW)) { in zio_read_bp_init()
1062 zio_push_transform(zio, cbuf, psize, psize, zio_decompress); in zio_read_bp_init()
1066 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_read_bp_init()
1067 decode_embedded_bp_compressed(bp, zio->io_data); in zio_read_bp_init()
1073 zio->io_flags |= ZIO_FLAG_DONT_CACHE; in zio_read_bp_init()
1076 zio->io_flags |= ZIO_FLAG_DONT_CACHE; in zio_read_bp_init()
1078 if (BP_GET_DEDUP(bp) && zio->io_child_type == ZIO_CHILD_LOGICAL) in zio_read_bp_init()
1079 zio->io_pipeline = ZIO_DDT_READ_PIPELINE; in zio_read_bp_init()
1085 zio_write_bp_init(zio_t *zio) in zio_write_bp_init() argument
1087 spa_t *spa = zio->io_spa; in zio_write_bp_init()
1088 zio_prop_t *zp = &zio->io_prop; in zio_write_bp_init()
1090 blkptr_t *bp = zio->io_bp; in zio_write_bp_init()
1091 uint64_t lsize = zio->io_size; in zio_write_bp_init()
1099 if (zio_wait_for_children(zio, ZIO_CHILD_LOGICAL_BIT | in zio_write_bp_init()
1104 if (!IO_IS_ALLOCATING(zio)) in zio_write_bp_init()
1107 ASSERT(zio->io_child_type != ZIO_CHILD_DDT); in zio_write_bp_init()
1109 if (zio->io_bp_override) { in zio_write_bp_init()
1110 ASSERT(bp->blk_birth != zio->io_txg); in zio_write_bp_init()
1111 ASSERT(BP_GET_DEDUP(zio->io_bp_override) == 0); in zio_write_bp_init()
1113 *bp = *zio->io_bp_override; in zio_write_bp_init()
1114 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_write_bp_init()
1126 zio->io_flags |= ZIO_FLAG_NOPWRITE; in zio_write_bp_init()
1140 zio->io_pipeline |= ZIO_STAGE_DDT_WRITE; in zio_write_bp_init()
1143 zio->io_bp_override = NULL; in zio_write_bp_init()
1147 if (!BP_IS_HOLE(bp) && bp->blk_birth == zio->io_txg) { in zio_write_bp_init()
1159 ASSERT(zio->io_txg == spa_syncing_txg(spa)); in zio_write_bp_init()
1160 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_bp_init()
1173 psize = zio_compress_data(compress, zio->io_data, cbuf, lsize); in zio_write_bp_init()
1183 BP_SET_TYPE(bp, zio->io_prop.zp_type); in zio_write_bp_init()
1184 BP_SET_LEVEL(bp, zio->io_prop.zp_level); in zio_write_bp_init()
1186 bp->blk_birth = zio->io_txg; in zio_write_bp_init()
1187 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_write_bp_init()
1210 zio_push_transform(zio, cbuf, in zio_write_bp_init()
1224 if (!BP_IS_HOLE(bp) && bp->blk_birth == zio->io_txg && in zio_write_bp_init()
1228 enum zio_stage gang_stages = zio->io_pipeline & ZIO_GANG_STAGES; in zio_write_bp_init()
1229 zio->io_pipeline = ZIO_REWRITE_PIPELINE | gang_stages; in zio_write_bp_init()
1230 zio->io_flags |= ZIO_FLAG_IO_REWRITE; in zio_write_bp_init()
1233 zio->io_pipeline = ZIO_WRITE_PIPELINE; in zio_write_bp_init()
1237 if (zio->io_bp_orig.blk_birth != 0 && in zio_write_bp_init()
1242 BP_SET_BIRTH(bp, zio->io_txg, 0); in zio_write_bp_init()
1244 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_write_bp_init()
1256 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_bp_init()
1257 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); in zio_write_bp_init()
1258 zio->io_pipeline = ZIO_DDT_WRITE_PIPELINE; in zio_write_bp_init()
1261 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_bp_init()
1262 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); in zio_write_bp_init()
1263 zio->io_pipeline |= ZIO_STAGE_NOP_WRITE; in zio_write_bp_init()
1271 zio_free_bp_init(zio_t *zio) in zio_free_bp_init() argument
1273 blkptr_t *bp = zio->io_bp; in zio_free_bp_init()
1275 if (zio->io_child_type == ZIO_CHILD_LOGICAL) { in zio_free_bp_init()
1277 zio->io_pipeline = ZIO_DDT_FREE_PIPELINE; in zio_free_bp_init()
1290 zio_taskq_dispatch(zio_t *zio, zio_taskq_type_t q, boolean_t cutinline) in zio_taskq_dispatch() argument
1292 spa_t *spa = zio->io_spa; in zio_taskq_dispatch()
1293 zio_type_t t = zio->io_type; in zio_taskq_dispatch()
1301 if (zio->io_flags & (ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_PROBE)) in zio_taskq_dispatch()
1307 if (t == ZIO_TYPE_WRITE && zio->io_vd && zio->io_vd->vdev_aux) in zio_taskq_dispatch()
1314 if (zio->io_priority == ZIO_PRIORITY_NOW && in zio_taskq_dispatch()
1325 ASSERT(zio->io_tqent.tqent_next == NULL); in zio_taskq_dispatch()
1326 spa_taskq_dispatch_ent(spa, t, q, (task_func_t *)zio_execute, zio, in zio_taskq_dispatch()
1327 flags, &zio->io_tqent); in zio_taskq_dispatch()
1331 zio_taskq_member(zio_t *zio, zio_taskq_type_t q) in zio_taskq_member() argument
1333 kthread_t *executor = zio->io_executor; in zio_taskq_member()
1334 spa_t *spa = zio->io_spa; in zio_taskq_member()
1349 zio_issue_async(zio_t *zio) in zio_issue_async() argument
1351 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_FALSE); in zio_issue_async()
1357 zio_interrupt(zio_t *zio) in zio_interrupt() argument
1359 zio_taskq_dispatch(zio, ZIO_TASKQ_INTERRUPT, B_FALSE); in zio_interrupt()
1363 zio_delay_interrupt(zio_t *zio) in zio_delay_interrupt() argument
1377 if (zio->io_target_timestamp != 0) { in zio_delay_interrupt()
1380 if (now >= zio->io_target_timestamp) { in zio_delay_interrupt()
1392 DTRACE_PROBE2(zio__delay__miss, zio_t *, zio, in zio_delay_interrupt()
1395 zio_interrupt(zio); in zio_delay_interrupt()
1397 hrtime_t diff = zio->io_target_timestamp - now; in zio_delay_interrupt()
1399 DTRACE_PROBE3(zio__delay__hit, zio_t *, zio, in zio_delay_interrupt()
1403 (void (*)(void *))zio_interrupt, zio, diff, 1, 0); in zio_delay_interrupt()
1410 DTRACE_PROBE1(zio__delay__skip, zio_t *, zio); in zio_delay_interrupt()
1411 zio_interrupt(zio); in zio_delay_interrupt()
1433 zio_execute(zio_t *zio) in zio_execute() argument
1435 zio->io_executor = curthread; in zio_execute()
1437 while (zio->io_stage < ZIO_STAGE_DONE) { in zio_execute()
1438 enum zio_stage pipeline = zio->io_pipeline; in zio_execute()
1439 enum zio_stage stage = zio->io_stage; in zio_execute()
1442 ASSERT(!MUTEX_HELD(&zio->io_lock)); in zio_execute()
1444 ASSERT(zio->io_stall == NULL); in zio_execute()
1461 if ((stage & ZIO_BLOCKING_STAGES) && zio->io_vd == NULL && in zio_execute()
1462 zio_taskq_member(zio, ZIO_TASKQ_INTERRUPT)) { in zio_execute()
1465 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, cut); in zio_execute()
1469 zio->io_stage = stage; in zio_execute()
1470 rv = zio_pipeline[highbit64(stage) - 1](zio); in zio_execute()
1485 zio_wait(zio_t *zio) in zio_wait() argument
1489 ASSERT(zio->io_stage == ZIO_STAGE_OPEN); in zio_wait()
1490 ASSERT(zio->io_executor == NULL); in zio_wait()
1492 zio->io_waiter = curthread; in zio_wait()
1494 zio_execute(zio); in zio_wait()
1496 mutex_enter(&zio->io_lock); in zio_wait()
1497 while (zio->io_executor != NULL) in zio_wait()
1498 cv_wait(&zio->io_cv, &zio->io_lock); in zio_wait()
1499 mutex_exit(&zio->io_lock); in zio_wait()
1501 error = zio->io_error; in zio_wait()
1502 zio_destroy(zio); in zio_wait()
1508 zio_nowait(zio_t *zio) in zio_nowait() argument
1510 ASSERT(zio->io_executor == NULL); in zio_nowait()
1512 if (zio->io_child_type == ZIO_CHILD_LOGICAL && in zio_nowait()
1513 zio_unique_parent(zio) == NULL) { in zio_nowait()
1519 spa_t *spa = zio->io_spa; in zio_nowait()
1521 zio_add_child(spa->spa_async_zio_root[CPU_SEQID], zio); in zio_nowait()
1524 zio_execute(zio); in zio_nowait()
1583 zio_suspend(spa_t *spa, zio_t *zio) in zio_suspend() argument
1601 if (zio != NULL) { in zio_suspend()
1602 ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER)); in zio_suspend()
1603 ASSERT(zio != spa->spa_suspend_zio_root); in zio_suspend()
1604 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_suspend()
1605 ASSERT(zio_unique_parent(zio) == NULL); in zio_suspend()
1606 ASSERT(zio->io_stage == ZIO_STAGE_DONE); in zio_suspend()
1607 zio_add_child(spa->spa_suspend_zio_root, zio); in zio_suspend()
1724 zio_t *zio; in zio_rewrite_gang() local
1727 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, in zio_rewrite_gang()
1740 zio_checksum_compute(zio, BP_GET_CHECKSUM(bp), in zio_rewrite_gang()
1748 zio->io_pipeline &= ~ZIO_VDEV_IO_STAGES; in zio_rewrite_gang()
1750 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, in zio_rewrite_gang()
1755 return (zio); in zio_rewrite_gang()
1783 static void zio_gang_tree_assemble_done(zio_t *zio);
1840 zio_gang_tree_assemble_done(zio_t *zio) in zio_gang_tree_assemble_done() argument
1842 zio_t *gio = zio->io_gang_leader; in zio_gang_tree_assemble_done()
1843 zio_gang_node_t *gn = zio->io_private; in zio_gang_tree_assemble_done()
1844 blkptr_t *bp = zio->io_bp; in zio_gang_tree_assemble_done()
1846 ASSERT(gio == zio_unique_parent(zio)); in zio_gang_tree_assemble_done()
1847 ASSERT(zio->io_child_count == 0); in zio_gang_tree_assemble_done()
1849 if (zio->io_error) in zio_gang_tree_assemble_done()
1853 byteswap_uint64_array(zio->io_data, zio->io_size); in zio_gang_tree_assemble_done()
1855 ASSERT(zio->io_data == gn->gn_gbh); in zio_gang_tree_assemble_done()
1856 ASSERT(zio->io_size == SPA_GANGBLOCKSIZE); in zio_gang_tree_assemble_done()
1871 zio_t *zio; in zio_gang_tree_issue() local
1881 zio = zio_gang_issue_func[gio->io_type](pio, bp, gn, data); in zio_gang_tree_issue()
1890 zio_gang_tree_issue(zio, gn->gn_child[g], gbp, data); in zio_gang_tree_issue()
1898 if (zio != pio) in zio_gang_tree_issue()
1899 zio_nowait(zio); in zio_gang_tree_issue()
1903 zio_gang_assemble(zio_t *zio) in zio_gang_assemble() argument
1905 blkptr_t *bp = zio->io_bp; in zio_gang_assemble()
1907 ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == NULL); in zio_gang_assemble()
1908 ASSERT(zio->io_child_type > ZIO_CHILD_GANG); in zio_gang_assemble()
1910 zio->io_gang_leader = zio; in zio_gang_assemble()
1912 zio_gang_tree_assemble(zio, bp, &zio->io_gang_tree); in zio_gang_assemble()
1918 zio_gang_issue(zio_t *zio) in zio_gang_issue() argument
1920 blkptr_t *bp = zio->io_bp; in zio_gang_issue()
1922 if (zio_wait_for_children(zio, ZIO_CHILD_GANG_BIT, ZIO_WAIT_DONE)) { in zio_gang_issue()
1926 ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == zio); in zio_gang_issue()
1927 ASSERT(zio->io_child_type > ZIO_CHILD_GANG); in zio_gang_issue()
1929 if (zio->io_child_error[ZIO_CHILD_GANG] == 0) in zio_gang_issue()
1930 zio_gang_tree_issue(zio, zio->io_gang_tree, bp, zio->io_data); in zio_gang_issue()
1932 zio_gang_tree_free(&zio->io_gang_tree); in zio_gang_issue()
1934 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_gang_issue()
1940 zio_write_gang_member_ready(zio_t *zio) in zio_write_gang_member_ready() argument
1942 zio_t *pio = zio_unique_parent(zio); in zio_write_gang_member_ready()
1943 zio_t *gio = zio->io_gang_leader; in zio_write_gang_member_ready()
1944 dva_t *cdva = zio->io_bp->blk_dva; in zio_write_gang_member_ready()
1948 if (BP_IS_HOLE(zio->io_bp)) in zio_write_gang_member_ready()
1951 ASSERT(BP_IS_HOLE(&zio->io_bp_orig)); in zio_write_gang_member_ready()
1953 ASSERT(zio->io_child_type == ZIO_CHILD_GANG); in zio_write_gang_member_ready()
1954 ASSERT3U(zio->io_prop.zp_copies, ==, gio->io_prop.zp_copies); in zio_write_gang_member_ready()
1955 ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(zio->io_bp)); in zio_write_gang_member_ready()
1957 ASSERT3U(BP_GET_NDVAS(zio->io_bp), <=, BP_GET_NDVAS(pio->io_bp)); in zio_write_gang_member_ready()
1960 for (int d = 0; d < BP_GET_NDVAS(zio->io_bp); d++) { in zio_write_gang_member_ready()
1975 zio_t *zio; in zio_write_gang_block() local
2008 zio = zio_rewrite(pio, spa, txg, bp, gbh, SPA_GANGBLOCKSIZE, NULL, NULL, in zio_write_gang_block()
2028 zio_nowait(zio_write(zio, spa, txg, &gbh->zg_blkptr[g], in zio_write_gang_block()
2040 zio_nowait(zio); in zio_write_gang_block()
2064 zio_nop_write(zio_t *zio) in zio_nop_write() argument
2066 blkptr_t *bp = zio->io_bp; in zio_nop_write()
2067 blkptr_t *bp_orig = &zio->io_bp_orig; in zio_nop_write()
2068 zio_prop_t *zp = &zio->io_prop; in zio_nop_write()
2071 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); in zio_nop_write()
2074 ASSERT(zio->io_bp_override == NULL); in zio_nop_write()
2075 ASSERT(IO_IS_ALLOCATING(zio)); in zio_nop_write()
2106 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_nop_write()
2107 zio->io_flags |= ZIO_FLAG_NOPWRITE; in zio_nop_write()
2119 zio_ddt_child_read_done(zio_t *zio) in zio_ddt_child_read_done() argument
2121 blkptr_t *bp = zio->io_bp; in zio_ddt_child_read_done()
2122 ddt_entry_t *dde = zio->io_private; in zio_ddt_child_read_done()
2124 zio_t *pio = zio_unique_parent(zio); in zio_ddt_child_read_done()
2128 if (zio->io_error == 0) in zio_ddt_child_read_done()
2130 if (zio->io_error == 0 && dde->dde_repair_data == NULL) in zio_ddt_child_read_done()
2131 dde->dde_repair_data = zio->io_data; in zio_ddt_child_read_done()
2133 zio_buf_free(zio->io_data, zio->io_size); in zio_ddt_child_read_done()
2138 zio_ddt_read_start(zio_t *zio) in zio_ddt_read_start() argument
2140 blkptr_t *bp = zio->io_bp; in zio_ddt_read_start()
2143 ASSERT(BP_GET_PSIZE(bp) == zio->io_size); in zio_ddt_read_start()
2144 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_ddt_read_start()
2146 if (zio->io_child_error[ZIO_CHILD_DDT]) { in zio_ddt_read_start()
2147 ddt_t *ddt = ddt_select(zio->io_spa, bp); in zio_ddt_read_start()
2153 ASSERT(zio->io_vsd == NULL); in zio_ddt_read_start()
2154 zio->io_vsd = dde; in zio_ddt_read_start()
2164 zio_nowait(zio_read(zio, zio->io_spa, &blk, in zio_ddt_read_start()
2165 zio_buf_alloc(zio->io_size), zio->io_size, in zio_ddt_read_start()
2166 zio_ddt_child_read_done, dde, zio->io_priority, in zio_ddt_read_start()
2167 ZIO_DDT_CHILD_FLAGS(zio) | ZIO_FLAG_DONT_PROPAGATE, in zio_ddt_read_start()
2168 &zio->io_bookmark)); in zio_ddt_read_start()
2173 zio_nowait(zio_read(zio, zio->io_spa, bp, in zio_ddt_read_start()
2174 zio->io_data, zio->io_size, NULL, NULL, zio->io_priority, in zio_ddt_read_start()
2175 ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark)); in zio_ddt_read_start()
2181 zio_ddt_read_done(zio_t *zio) in zio_ddt_read_done() argument
2183 blkptr_t *bp = zio->io_bp; in zio_ddt_read_done()
2185 if (zio_wait_for_children(zio, ZIO_CHILD_DDT_BIT, ZIO_WAIT_DONE)) { in zio_ddt_read_done()
2190 ASSERT(BP_GET_PSIZE(bp) == zio->io_size); in zio_ddt_read_done()
2191 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_ddt_read_done()
2193 if (zio->io_child_error[ZIO_CHILD_DDT]) { in zio_ddt_read_done()
2194 ddt_t *ddt = ddt_select(zio->io_spa, bp); in zio_ddt_read_done()
2195 ddt_entry_t *dde = zio->io_vsd; in zio_ddt_read_done()
2197 ASSERT(spa_load_state(zio->io_spa) != SPA_LOAD_NONE); in zio_ddt_read_done()
2201 zio->io_stage = ZIO_STAGE_DDT_READ_START >> 1; in zio_ddt_read_done()
2202 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_FALSE); in zio_ddt_read_done()
2206 bcopy(dde->dde_repair_data, zio->io_data, zio->io_size); in zio_ddt_read_done()
2207 zio->io_child_error[ZIO_CHILD_DDT] = 0; in zio_ddt_read_done()
2210 zio->io_vsd = NULL; in zio_ddt_read_done()
2213 ASSERT(zio->io_vsd == NULL); in zio_ddt_read_done()
2219 zio_ddt_collision(zio_t *zio, ddt_t *ddt, ddt_entry_t *dde) in zio_ddt_collision() argument
2221 spa_t *spa = zio->io_spa; in zio_ddt_collision()
2233 return (lio->io_orig_size != zio->io_orig_size || in zio_ddt_collision()
2234 bcmp(zio->io_orig_data, lio->io_orig_data, in zio_ddt_collision()
2235 zio->io_orig_size) != 0); in zio_ddt_collision()
2245 blkptr_t blk = *zio->io_bp; in zio_ddt_collision()
2255 &aflags, &zio->io_bookmark); in zio_ddt_collision()
2258 if (arc_buf_size(abuf) != zio->io_orig_size || in zio_ddt_collision()
2259 bcmp(abuf->b_data, zio->io_orig_data, in zio_ddt_collision()
2260 zio->io_orig_size) != 0) in zio_ddt_collision()
2274 zio_ddt_child_write_ready(zio_t *zio) in zio_ddt_child_write_ready() argument
2276 int p = zio->io_prop.zp_copies; in zio_ddt_child_write_ready()
2277 ddt_t *ddt = ddt_select(zio->io_spa, zio->io_bp); in zio_ddt_child_write_ready()
2278 ddt_entry_t *dde = zio->io_private; in zio_ddt_child_write_ready()
2282 if (zio->io_error) in zio_ddt_child_write_ready()
2287 ASSERT(dde->dde_lead_zio[p] == zio); in zio_ddt_child_write_ready()
2289 ddt_phys_fill(ddp, zio->io_bp); in zio_ddt_child_write_ready()
2291 while ((pio = zio_walk_parents(zio)) != NULL) in zio_ddt_child_write_ready()
2292 ddt_bp_fill(ddp, pio->io_bp, zio->io_txg); in zio_ddt_child_write_ready()
2298 zio_ddt_child_write_done(zio_t *zio) in zio_ddt_child_write_done() argument
2300 int p = zio->io_prop.zp_copies; in zio_ddt_child_write_done()
2301 ddt_t *ddt = ddt_select(zio->io_spa, zio->io_bp); in zio_ddt_child_write_done()
2302 ddt_entry_t *dde = zio->io_private; in zio_ddt_child_write_done()
2308 ASSERT(dde->dde_lead_zio[p] == zio); in zio_ddt_child_write_done()
2311 if (zio->io_error == 0) { in zio_ddt_child_write_done()
2312 while (zio_walk_parents(zio) != NULL) in zio_ddt_child_write_done()
2322 zio_ddt_ditto_write_done(zio_t *zio) in zio_ddt_ditto_write_done() argument
2325 zio_prop_t *zp = &zio->io_prop; in zio_ddt_ditto_write_done()
2326 blkptr_t *bp = zio->io_bp; in zio_ddt_ditto_write_done()
2327 ddt_t *ddt = ddt_select(zio->io_spa, bp); in zio_ddt_ditto_write_done()
2328 ddt_entry_t *dde = zio->io_private; in zio_ddt_ditto_write_done()
2335 ASSERT(dde->dde_lead_zio[p] == zio); in zio_ddt_ditto_write_done()
2338 if (zio->io_error == 0) { in zio_ddt_ditto_write_done()
2343 ddt_phys_free(ddt, ddk, ddp, zio->io_txg); in zio_ddt_ditto_write_done()
2351 zio_ddt_write(zio_t *zio) in zio_ddt_write() argument
2353 spa_t *spa = zio->io_spa; in zio_ddt_write()
2354 blkptr_t *bp = zio->io_bp; in zio_ddt_write()
2355 uint64_t txg = zio->io_txg; in zio_ddt_write()
2356 zio_prop_t *zp = &zio->io_prop; in zio_ddt_write()
2367 ASSERT(BP_IS_HOLE(bp) || zio->io_bp_override); in zio_ddt_write()
2373 if (zp->zp_dedup_verify && zio_ddt_collision(zio, ddt, dde)) { in zio_ddt_write()
2383 zio_pop_transforms(zio); in zio_ddt_write()
2384 zio->io_stage = ZIO_STAGE_OPEN; in zio_ddt_write()
2389 zio->io_pipeline = ZIO_WRITE_PIPELINE; in zio_ddt_write()
2410 if (zio->io_bp_override) { in zio_ddt_write()
2411 zio_pop_transforms(zio); in zio_ddt_write()
2412 zio->io_stage = ZIO_STAGE_OPEN; in zio_ddt_write()
2413 zio->io_pipeline = ZIO_WRITE_PIPELINE; in zio_ddt_write()
2414 zio->io_bp_override = NULL; in zio_ddt_write()
2420 dio = zio_write(zio, spa, txg, bp, zio->io_orig_data, in zio_ddt_write()
2421 zio->io_orig_size, &czp, NULL, NULL, in zio_ddt_write()
2422 zio_ddt_ditto_write_done, dde, zio->io_priority, in zio_ddt_write()
2423 ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark); in zio_ddt_write()
2425 zio_push_transform(dio, zio->io_data, zio->io_size, 0, NULL); in zio_ddt_write()
2433 zio_add_child(zio, dde->dde_lead_zio[p]); in zio_ddt_write()
2436 } else if (zio->io_bp_override) { in zio_ddt_write()
2438 ASSERT(BP_EQUAL(bp, zio->io_bp_override)); in zio_ddt_write()
2442 cio = zio_write(zio, spa, txg, bp, zio->io_orig_data, in zio_ddt_write()
2443 zio->io_orig_size, zp, zio_ddt_child_write_ready, NULL, in zio_ddt_write()
2444 zio_ddt_child_write_done, dde, zio->io_priority, in zio_ddt_write()
2445 ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark); in zio_ddt_write()
2447 zio_push_transform(cio, zio->io_data, zio->io_size, 0, NULL); in zio_ddt_write()
2464 zio_ddt_free(zio_t *zio) in zio_ddt_free() argument
2466 spa_t *spa = zio->io_spa; in zio_ddt_free()
2467 blkptr_t *bp = zio->io_bp; in zio_ddt_free()
2473 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_ddt_free()
2490 zio_dva_allocate(zio_t *zio) in zio_dva_allocate() argument
2492 spa_t *spa = zio->io_spa; in zio_dva_allocate()
2494 blkptr_t *bp = zio->io_bp; in zio_dva_allocate()
2498 if (zio->io_gang_leader == NULL) { in zio_dva_allocate()
2499 ASSERT(zio->io_child_type > ZIO_CHILD_GANG); in zio_dva_allocate()
2500 zio->io_gang_leader = zio; in zio_dva_allocate()
2505 ASSERT3U(zio->io_prop.zp_copies, >, 0); in zio_dva_allocate()
2506 ASSERT3U(zio->io_prop.zp_copies, <=, spa_max_replication(spa)); in zio_dva_allocate()
2507 ASSERT3U(zio->io_size, ==, BP_GET_PSIZE(bp)); in zio_dva_allocate()
2514 flags |= (zio->io_flags & ZIO_FLAG_NODATA) ? METASLAB_GANG_AVOID : 0; in zio_dva_allocate()
2515 flags |= (zio->io_flags & ZIO_FLAG_GANG_CHILD) ? in zio_dva_allocate()
2517 error = metaslab_alloc(spa, mc, zio->io_size, bp, in zio_dva_allocate()
2518 zio->io_prop.zp_copies, zio->io_txg, NULL, flags); in zio_dva_allocate()
2522 "size %llu, error %d", spa_name(spa), zio, zio->io_size, in zio_dva_allocate()
2524 if (error == ENOSPC && zio->io_size > SPA_MINBLOCKSIZE) in zio_dva_allocate()
2525 return (zio_write_gang_block(zio)); in zio_dva_allocate()
2526 zio->io_error = error; in zio_dva_allocate()
2533 zio_dva_free(zio_t *zio) in zio_dva_free() argument
2535 metaslab_free(zio->io_spa, zio->io_bp, zio->io_txg, B_FALSE); in zio_dva_free()
2541 zio_dva_claim(zio_t *zio) in zio_dva_claim() argument
2545 error = metaslab_claim(zio->io_spa, zio->io_bp, zio->io_txg); in zio_dva_claim()
2547 zio->io_error = error; in zio_dva_claim()
2558 zio_dva_unallocate(zio_t *zio, zio_gang_node_t *gn, blkptr_t *bp) in zio_dva_unallocate() argument
2560 ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp)); in zio_dva_unallocate()
2561 ASSERT(zio->io_bp_override == NULL); in zio_dva_unallocate()
2564 metaslab_free(zio->io_spa, bp, bp->blk_birth, B_TRUE); in zio_dva_unallocate()
2568 zio_dva_unallocate(zio, gn->gn_child[g], in zio_dva_unallocate()
2648 zio_vdev_io_start(zio_t *zio) in zio_vdev_io_start() argument
2650 vdev_t *vd = zio->io_vd; in zio_vdev_io_start()
2652 spa_t *spa = zio->io_spa; in zio_vdev_io_start()
2654 ASSERT(zio->io_error == 0); in zio_vdev_io_start()
2655 ASSERT(zio->io_child_error[ZIO_CHILD_VDEV] == 0); in zio_vdev_io_start()
2658 if (!(zio->io_flags & ZIO_FLAG_CONFIG_WRITER)) in zio_vdev_io_start()
2659 spa_config_enter(spa, SCL_ZIO, zio, RW_READER); in zio_vdev_io_start()
2664 vdev_mirror_ops.vdev_op_io_start(zio); in zio_vdev_io_start()
2678 if (!(zio->io_flags & ZIO_FLAG_SCAN_THREAD) && zio->io_bp != NULL && in zio_vdev_io_start()
2680 zio->io_bookmark.zb_objset != DMU_META_OBJSET && in zio_vdev_io_start()
2681 zio->io_txg != spa_syncing_txg(spa)) { in zio_vdev_io_start()
2690 if (!(zio->io_flags & ZIO_FLAG_PHYSICAL) && in zio_vdev_io_start()
2691 P2PHASE(zio->io_size, align) != 0) { in zio_vdev_io_start()
2693 uint64_t asize = P2ROUNDUP(zio->io_size, align); in zio_vdev_io_start()
2696 if (zio->io_type == ZIO_TYPE_WRITE) { in zio_vdev_io_start()
2697 bcopy(zio->io_data, abuf, zio->io_size); in zio_vdev_io_start()
2698 bzero(abuf + zio->io_size, asize - zio->io_size); in zio_vdev_io_start()
2700 zio_push_transform(zio, abuf, asize, asize, zio_subblock); in zio_vdev_io_start()
2707 if (!(zio->io_flags & ZIO_FLAG_PHYSICAL)) { in zio_vdev_io_start()
2708 ASSERT0(P2PHASE(zio->io_offset, align)); in zio_vdev_io_start()
2709 ASSERT0(P2PHASE(zio->io_size, align)); in zio_vdev_io_start()
2715 ASSERT0(P2PHASE(zio->io_offset, SPA_MINBLOCKSIZE)); in zio_vdev_io_start()
2716 ASSERT0(P2PHASE(zio->io_size, SPA_MINBLOCKSIZE)); in zio_vdev_io_start()
2719 VERIFY(zio->io_type != ZIO_TYPE_WRITE || spa_writeable(spa)); in zio_vdev_io_start()
2734 if ((zio->io_flags & ZIO_FLAG_IO_REPAIR) && in zio_vdev_io_start()
2735 !(zio->io_flags & ZIO_FLAG_SELF_HEAL) && in zio_vdev_io_start()
2736 zio->io_txg != 0 && /* not a delegated i/o */ in zio_vdev_io_start()
2737 !vdev_dtl_contains(vd, DTL_PARTIAL, zio->io_txg, 1)) { in zio_vdev_io_start()
2738 ASSERT(zio->io_type == ZIO_TYPE_WRITE); in zio_vdev_io_start()
2739 zio_vdev_io_bypass(zio); in zio_vdev_io_start()
2744 (zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE)) { in zio_vdev_io_start()
2746 if (zio->io_type == ZIO_TYPE_READ && vdev_cache_read(zio)) in zio_vdev_io_start()
2749 if ((zio = vdev_queue_io(zio)) == NULL) in zio_vdev_io_start()
2752 if (!vdev_accessible(vd, zio)) { in zio_vdev_io_start()
2753 zio->io_error = SET_ERROR(ENXIO); in zio_vdev_io_start()
2754 zio_interrupt(zio); in zio_vdev_io_start()
2759 vd->vdev_ops->vdev_op_io_start(zio); in zio_vdev_io_start()
2764 zio_vdev_io_done(zio_t *zio) in zio_vdev_io_done() argument
2766 vdev_t *vd = zio->io_vd; in zio_vdev_io_done()
2770 if (zio_wait_for_children(zio, ZIO_CHILD_VDEV_BIT, ZIO_WAIT_DONE)) { in zio_vdev_io_done()
2774 ASSERT(zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE); in zio_vdev_io_done()
2778 vdev_queue_io_done(zio); in zio_vdev_io_done()
2780 if (zio->io_type == ZIO_TYPE_WRITE) in zio_vdev_io_done()
2781 vdev_cache_write(zio); in zio_vdev_io_done()
2783 if (zio_injection_enabled && zio->io_error == 0) in zio_vdev_io_done()
2784 zio->io_error = zio_handle_device_injection(vd, in zio_vdev_io_done()
2785 zio, EIO); in zio_vdev_io_done()
2787 if (zio_injection_enabled && zio->io_error == 0) in zio_vdev_io_done()
2788 zio->io_error = zio_handle_label_injection(zio, EIO); in zio_vdev_io_done()
2790 if (zio->io_error) { in zio_vdev_io_done()
2791 if (!vdev_accessible(vd, zio)) { in zio_vdev_io_done()
2792 zio->io_error = SET_ERROR(ENXIO); in zio_vdev_io_done()
2799 ops->vdev_op_io_done(zio); in zio_vdev_io_done()
2802 VERIFY(vdev_probe(vd, zio) == NULL); in zio_vdev_io_done()
2821 zio_vsd_default_cksum_report(zio_t *zio, zio_cksum_report_t *zcr, void *ignored) in zio_vsd_default_cksum_report() argument
2823 void *buf = zio_buf_alloc(zio->io_size); in zio_vsd_default_cksum_report()
2825 bcopy(zio->io_data, buf, zio->io_size); in zio_vsd_default_cksum_report()
2827 zcr->zcr_cbinfo = zio->io_size; in zio_vsd_default_cksum_report()
2834 zio_vdev_io_assess(zio_t *zio) in zio_vdev_io_assess() argument
2836 vdev_t *vd = zio->io_vd; in zio_vdev_io_assess()
2838 if (zio_wait_for_children(zio, ZIO_CHILD_VDEV_BIT, ZIO_WAIT_DONE)) { in zio_vdev_io_assess()
2842 if (vd == NULL && !(zio->io_flags & ZIO_FLAG_CONFIG_WRITER)) in zio_vdev_io_assess()
2843 spa_config_exit(zio->io_spa, SCL_ZIO, zio); in zio_vdev_io_assess()
2845 if (zio->io_vsd != NULL) { in zio_vdev_io_assess()
2846 zio->io_vsd_ops->vsd_free(zio); in zio_vdev_io_assess()
2847 zio->io_vsd = NULL; in zio_vdev_io_assess()
2850 if (zio_injection_enabled && zio->io_error == 0) in zio_vdev_io_assess()
2851 zio->io_error = zio_handle_fault_injection(zio, EIO); in zio_vdev_io_assess()
2859 if (zio->io_error && vd == NULL && in zio_vdev_io_assess()
2860 !(zio->io_flags & (ZIO_FLAG_DONT_RETRY | ZIO_FLAG_IO_RETRY))) { in zio_vdev_io_assess()
2861 ASSERT(!(zio->io_flags & ZIO_FLAG_DONT_QUEUE)); /* not a leaf */ in zio_vdev_io_assess()
2862 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_BYPASS)); /* not a leaf */ in zio_vdev_io_assess()
2863 zio->io_error = 0; in zio_vdev_io_assess()
2864 zio->io_flags |= ZIO_FLAG_IO_RETRY | in zio_vdev_io_assess()
2866 zio->io_stage = ZIO_STAGE_VDEV_IO_START >> 1; in zio_vdev_io_assess()
2867 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, in zio_vdev_io_assess()
2876 if (zio->io_error && vd != NULL && vd->vdev_ops->vdev_op_leaf && in zio_vdev_io_assess()
2877 !vdev_accessible(vd, zio)) in zio_vdev_io_assess()
2878 zio->io_error = SET_ERROR(ENXIO); in zio_vdev_io_assess()
2884 if (zio->io_error == ENXIO && zio->io_type == ZIO_TYPE_WRITE && in zio_vdev_io_assess()
2889 if (zio->io_error) in zio_vdev_io_assess()
2890 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_vdev_io_assess()
2893 zio->io_physdone != NULL) { in zio_vdev_io_assess()
2894 ASSERT(!(zio->io_flags & ZIO_FLAG_DELEGATED)); in zio_vdev_io_assess()
2895 ASSERT(zio->io_child_type == ZIO_CHILD_VDEV); in zio_vdev_io_assess()
2896 zio->io_physdone(zio->io_logical); in zio_vdev_io_assess()
2903 zio_vdev_io_reissue(zio_t *zio) in zio_vdev_io_reissue() argument
2905 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); in zio_vdev_io_reissue()
2906 ASSERT(zio->io_error == 0); in zio_vdev_io_reissue()
2908 zio->io_stage >>= 1; in zio_vdev_io_reissue()
2912 zio_vdev_io_redone(zio_t *zio) in zio_vdev_io_redone() argument
2914 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_DONE); in zio_vdev_io_redone()
2916 zio->io_stage >>= 1; in zio_vdev_io_redone()
2920 zio_vdev_io_bypass(zio_t *zio) in zio_vdev_io_bypass() argument
2922 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); in zio_vdev_io_bypass()
2923 ASSERT(zio->io_error == 0); in zio_vdev_io_bypass()
2925 zio->io_flags |= ZIO_FLAG_IO_BYPASS; in zio_vdev_io_bypass()
2926 zio->io_stage = ZIO_STAGE_VDEV_IO_ASSESS >> 1; in zio_vdev_io_bypass()
2935 zio_checksum_generate(zio_t *zio) in zio_checksum_generate() argument
2937 blkptr_t *bp = zio->io_bp; in zio_checksum_generate()
2945 checksum = zio->io_prop.zp_checksum; in zio_checksum_generate()
2952 if (BP_IS_GANG(bp) && zio->io_child_type == ZIO_CHILD_GANG) { in zio_checksum_generate()
2953 ASSERT(!IO_IS_ALLOCATING(zio)); in zio_checksum_generate()
2960 zio_checksum_compute(zio, checksum, zio->io_data, zio->io_size); in zio_checksum_generate()
2966 zio_checksum_verify(zio_t *zio) in zio_checksum_verify() argument
2969 blkptr_t *bp = zio->io_bp; in zio_checksum_verify()
2972 ASSERT(zio->io_vd != NULL); in zio_checksum_verify()
2979 if (zio->io_prop.zp_checksum == ZIO_CHECKSUM_OFF) in zio_checksum_verify()
2982 ASSERT(zio->io_prop.zp_checksum == ZIO_CHECKSUM_LABEL); in zio_checksum_verify()
2985 if ((error = zio_checksum_error(zio, &info)) != 0) { in zio_checksum_verify()
2986 zio->io_error = error; in zio_checksum_verify()
2988 !(zio->io_flags & ZIO_FLAG_SPECULATIVE)) { in zio_checksum_verify()
2989 zfs_ereport_start_checksum(zio->io_spa, in zio_checksum_verify()
2990 zio->io_vd, zio, zio->io_offset, in zio_checksum_verify()
2991 zio->io_size, NULL, &info); in zio_checksum_verify()
3002 zio_checksum_verified(zio_t *zio) in zio_checksum_verified() argument
3004 zio->io_pipeline &= ~ZIO_STAGE_CHECKSUM_VERIFY; in zio_checksum_verified()
3039 zio_ready(zio_t *zio) in zio_ready() argument
3041 blkptr_t *bp = zio->io_bp; in zio_ready()
3044 if (zio_wait_for_children(zio, ZIO_CHILD_GANG_BIT | ZIO_CHILD_DDT_BIT, in zio_ready()
3049 if (zio->io_ready) { in zio_ready()
3050 ASSERT(IO_IS_ALLOCATING(zio)); in zio_ready()
3051 ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp) || in zio_ready()
3052 (zio->io_flags & ZIO_FLAG_NOPWRITE)); in zio_ready()
3053 ASSERT(zio->io_children[ZIO_CHILD_GANG][ZIO_WAIT_READY] == 0); in zio_ready()
3055 zio->io_ready(zio); in zio_ready()
3058 if (bp != NULL && bp != &zio->io_bp_copy) in zio_ready()
3059 zio->io_bp_copy = *bp; in zio_ready()
3061 if (zio->io_error) in zio_ready()
3062 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_ready()
3064 mutex_enter(&zio->io_lock); in zio_ready()
3065 zio->io_state[ZIO_WAIT_READY] = 1; in zio_ready()
3066 pio = zio_walk_parents(zio); in zio_ready()
3067 mutex_exit(&zio->io_lock); in zio_ready()
3077 pio_next = zio_walk_parents(zio); in zio_ready()
3078 zio_notify_parent(pio, zio, ZIO_WAIT_READY); in zio_ready()
3081 if (zio->io_flags & ZIO_FLAG_NODATA) { in zio_ready()
3083 zio->io_flags &= ~ZIO_FLAG_NODATA; in zio_ready()
3085 ASSERT((uintptr_t)zio->io_data < SPA_MAXBLOCKSIZE); in zio_ready()
3086 zio->io_pipeline &= ~ZIO_VDEV_IO_STAGES; in zio_ready()
3091 zio->io_spa->spa_syncing_txg == zio->io_txg) in zio_ready()
3092 zio_handle_ignored_writes(zio); in zio_ready()
3098 zio_done(zio_t *zio) in zio_done() argument
3100 spa_t *spa = zio->io_spa; in zio_done()
3101 zio_t *lio = zio->io_logical; in zio_done()
3102 blkptr_t *bp = zio->io_bp; in zio_done()
3103 vdev_t *vd = zio->io_vd; in zio_done()
3104 uint64_t psize = zio->io_size; in zio_done()
3111 if (zio_wait_for_children(zio, ZIO_CHILD_ALL_BITS, ZIO_WAIT_DONE)) { in zio_done()
3117 ASSERT(zio->io_children[c][w] == 0); in zio_done()
3122 ASSERT(bcmp(bp, &zio->io_bp_copy, sizeof (blkptr_t)) == 0 || in zio_done()
3123 (bp == zio_unique_parent(zio)->io_bp)); in zio_done()
3124 if (zio->io_type == ZIO_TYPE_WRITE && !BP_IS_HOLE(bp) && in zio_done()
3125 zio->io_bp_override == NULL && in zio_done()
3126 !(zio->io_flags & ZIO_FLAG_IO_REPAIR)) { in zio_done()
3128 ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(bp)); in zio_done()
3132 if (zio->io_flags & ZIO_FLAG_NOPWRITE) in zio_done()
3133 VERIFY(BP_EQUAL(bp, &zio->io_bp_orig)); in zio_done()
3139 zio_inherit_child_errors(zio, ZIO_CHILD_VDEV); in zio_done()
3140 zio_inherit_child_errors(zio, ZIO_CHILD_GANG); in zio_done()
3141 zio_inherit_child_errors(zio, ZIO_CHILD_DDT); in zio_done()
3147 if (zio->io_error == 0) { in zio_done()
3148 while (zio->io_cksum_report != NULL) { in zio_done()
3149 zio_cksum_report_t *zcr = zio->io_cksum_report; in zio_done()
3152 char *abuf = zio->io_data; in zio_done()
3156 bcopy(zio->io_data, abuf, psize); in zio_done()
3160 zio->io_cksum_report = zcr->zcr_next; in zio_done()
3170 zio_pop_transforms(zio); /* note: may set zio->io_error */ in zio_done()
3172 vdev_stat_update(zio, psize); in zio_done()
3174 if (zio->io_error) { in zio_done()
3181 if (zio->io_error != ECKSUM && vd != NULL && !vdev_is_dead(vd)) in zio_done()
3182 zfs_ereport_post(FM_EREPORT_ZFS_IO, spa, vd, zio, 0, 0); in zio_done()
3184 if ((zio->io_error == EIO || !(zio->io_flags & in zio_done()
3186 zio == lio) { in zio_done()
3191 spa_log_error(spa, zio); in zio_done()
3192 zfs_ereport_post(FM_EREPORT_ZFS_DATA, spa, NULL, zio, in zio_done()
3197 if (zio->io_error && zio == lio) { in zio_done()
3203 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_done()
3205 if (IO_IS_ALLOCATING(zio) && in zio_done()
3206 !(zio->io_flags & ZIO_FLAG_CANFAIL)) { in zio_done()
3207 if (zio->io_error != ENOSPC) in zio_done()
3208 zio->io_reexecute |= ZIO_REEXECUTE_NOW; in zio_done()
3210 zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; in zio_done()
3213 if ((zio->io_type == ZIO_TYPE_READ || in zio_done()
3214 zio->io_type == ZIO_TYPE_FREE) && in zio_done()
3215 !(zio->io_flags & ZIO_FLAG_SCAN_THREAD) && in zio_done()
3216 zio->io_error == ENXIO && in zio_done()
3219 zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; in zio_done()
3221 if (!(zio->io_flags & ZIO_FLAG_CANFAIL) && !zio->io_reexecute) in zio_done()
3222 zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; in zio_done()
3239 zio_inherit_child_errors(zio, ZIO_CHILD_LOGICAL); in zio_done()
3241 if ((zio->io_error || zio->io_reexecute) && in zio_done()
3242 IO_IS_ALLOCATING(zio) && zio->io_gang_leader == zio && in zio_done()
3243 !(zio->io_flags & (ZIO_FLAG_IO_REWRITE | ZIO_FLAG_NOPWRITE))) in zio_done()
3244 zio_dva_unallocate(zio, zio->io_gang_tree, bp); in zio_done()
3246 zio_gang_tree_free(&zio->io_gang_tree); in zio_done()
3251 if ((zio->io_flags & ZIO_FLAG_GODFATHER) && in zio_done()
3252 (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) in zio_done()
3253 zio->io_reexecute = 0; in zio_done()
3255 if (zio->io_reexecute) { in zio_done()
3269 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_done()
3271 zio->io_gang_leader = NULL; in zio_done()
3273 mutex_enter(&zio->io_lock); in zio_done()
3274 zio->io_state[ZIO_WAIT_DONE] = 1; in zio_done()
3275 mutex_exit(&zio->io_lock); in zio_done()
3284 for (pio = zio_walk_parents(zio); pio != NULL; pio = pio_next) { in zio_done()
3285 zio_link_t *zl = zio->io_walk_link; in zio_done()
3286 pio_next = zio_walk_parents(zio); in zio_done()
3289 (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) { in zio_done()
3290 zio_remove_child(pio, zio, zl); in zio_done()
3291 zio_notify_parent(pio, zio, ZIO_WAIT_DONE); in zio_done()
3295 if ((pio = zio_unique_parent(zio)) != NULL) { in zio_done()
3301 ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER)); in zio_done()
3302 zio->io_flags |= ZIO_FLAG_DONT_PROPAGATE; in zio_done()
3303 zio_notify_parent(pio, zio, ZIO_WAIT_DONE); in zio_done()
3304 } else if (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND) { in zio_done()
3309 zio_suspend(spa, zio); in zio_done()
3315 ASSERT(zio->io_tqent.tqent_next == NULL); in zio_done()
3317 ZIO_TASKQ_ISSUE, (task_func_t *)zio_reexecute, zio, in zio_done()
3318 0, &zio->io_tqent); in zio_done()
3323 ASSERT(zio->io_child_count == 0); in zio_done()
3324 ASSERT(zio->io_reexecute == 0); in zio_done()
3325 ASSERT(zio->io_error == 0 || (zio->io_flags & ZIO_FLAG_CANFAIL)); in zio_done()
3330 while (zio->io_cksum_report != NULL) { in zio_done()
3331 zio_cksum_report_t *zcr = zio->io_cksum_report; in zio_done()
3332 zio->io_cksum_report = zcr->zcr_next; in zio_done()
3343 if (zio->io_done) in zio_done()
3344 zio->io_done(zio); in zio_done()
3346 mutex_enter(&zio->io_lock); in zio_done()
3347 zio->io_state[ZIO_WAIT_DONE] = 1; in zio_done()
3348 mutex_exit(&zio->io_lock); in zio_done()
3350 for (pio = zio_walk_parents(zio); pio != NULL; pio = pio_next) { in zio_done()
3351 zio_link_t *zl = zio->io_walk_link; in zio_done()
3352 pio_next = zio_walk_parents(zio); in zio_done()
3353 zio_remove_child(pio, zio, zl); in zio_done()
3354 zio_notify_parent(pio, zio, ZIO_WAIT_DONE); in zio_done()
3357 if (zio->io_waiter != NULL) { in zio_done()
3358 mutex_enter(&zio->io_lock); in zio_done()
3359 zio->io_executor = NULL; in zio_done()
3360 cv_broadcast(&zio->io_cv); in zio_done()
3361 mutex_exit(&zio->io_lock); in zio_done()
3363 zio_destroy(zio); in zio_done()