Lines Matching refs:zio

93 #define	IO_IS_ALLOCATING(zio) ((zio)->io_orig_pipeline & ZIO_STAGE_DVA_ALLOCATE)  argument
269 zio_push_transform(zio_t *zio, void *data, uint64_t size, uint64_t bufsize, in zio_push_transform() argument
274 zt->zt_orig_data = zio->io_data; in zio_push_transform()
275 zt->zt_orig_size = zio->io_size; in zio_push_transform()
279 zt->zt_next = zio->io_transform_stack; in zio_push_transform()
280 zio->io_transform_stack = zt; in zio_push_transform()
282 zio->io_data = data; in zio_push_transform()
283 zio->io_size = size; in zio_push_transform()
287 zio_pop_transforms(zio_t *zio) in zio_pop_transforms() argument
291 while ((zt = zio->io_transform_stack) != NULL) { in zio_pop_transforms()
293 zt->zt_transform(zio, in zio_pop_transforms()
297 zio_buf_free(zio->io_data, zt->zt_bufsize); in zio_pop_transforms()
299 zio->io_data = zt->zt_orig_data; in zio_pop_transforms()
300 zio->io_size = zt->zt_orig_size; in zio_pop_transforms()
301 zio->io_transform_stack = zt->zt_next; in zio_pop_transforms()
313 zio_subblock(zio_t *zio, void *data, uint64_t size) in zio_subblock() argument
315 ASSERT(zio->io_size > size); in zio_subblock()
317 if (zio->io_type == ZIO_TYPE_READ) in zio_subblock()
318 bcopy(zio->io_data, data, size); in zio_subblock()
322 zio_decompress(zio_t *zio, void *data, uint64_t size) in zio_decompress() argument
324 if (zio->io_error == 0 && in zio_decompress()
325 zio_decompress_data(BP_GET_COMPRESS(zio->io_bp), in zio_decompress()
326 zio->io_data, data, zio->io_size, size) != 0) in zio_decompress()
327 zio->io_error = SET_ERROR(EIO); in zio_decompress()
440 zio_wait_for_children(zio_t *zio, uint8_t childbits, enum zio_wait_type wait) in zio_wait_for_children() argument
444 mutex_enter(&zio->io_lock); in zio_wait_for_children()
445 ASSERT(zio->io_stall == NULL); in zio_wait_for_children()
450 uint64_t *countp = &zio->io_children[c][wait]; in zio_wait_for_children()
452 zio->io_stage >>= 1; in zio_wait_for_children()
453 zio->io_stall = countp; in zio_wait_for_children()
458 mutex_exit(&zio->io_lock); in zio_wait_for_children()
463 zio_notify_parent(zio_t *pio, zio_t *zio, enum zio_wait_type wait) in zio_notify_parent() argument
465 uint64_t *countp = &pio->io_children[zio->io_child_type][wait]; in zio_notify_parent()
466 int *errorp = &pio->io_child_error[zio->io_child_type]; in zio_notify_parent()
469 if (zio->io_error && !(zio->io_flags & ZIO_FLAG_DONT_PROPAGATE)) in zio_notify_parent()
470 *errorp = zio_worst_error(*errorp, zio->io_error); in zio_notify_parent()
471 pio->io_reexecute |= zio->io_reexecute; in zio_notify_parent()
486 zio_inherit_child_errors(zio_t *zio, enum zio_child c) in zio_inherit_child_errors() argument
488 if (zio->io_child_error[c] != 0 && zio->io_error == 0) in zio_inherit_child_errors()
489 zio->io_error = zio->io_child_error[c]; in zio_inherit_child_errors()
504 zio_t *zio; in zio_create() local
514 zio = kmem_cache_alloc(zio_cache, KM_SLEEP); in zio_create()
515 bzero(zio, sizeof (zio_t)); in zio_create()
517 mutex_init(&zio->io_lock, NULL, MUTEX_DEFAULT, NULL); in zio_create()
518 cv_init(&zio->io_cv, NULL, CV_DEFAULT, NULL); in zio_create()
520 list_create(&zio->io_parent_list, sizeof (zio_link_t), in zio_create()
522 list_create(&zio->io_child_list, sizeof (zio_link_t), in zio_create()
526 zio->io_child_type = ZIO_CHILD_VDEV; in zio_create()
528 zio->io_child_type = ZIO_CHILD_GANG; in zio_create()
530 zio->io_child_type = ZIO_CHILD_DDT; in zio_create()
532 zio->io_child_type = ZIO_CHILD_LOGICAL; in zio_create()
535 zio->io_bp = (blkptr_t *)bp; in zio_create()
536 zio->io_bp_copy = *bp; in zio_create()
537 zio->io_bp_orig = *bp; in zio_create()
539 zio->io_child_type == ZIO_CHILD_DDT) in zio_create()
540 zio->io_bp = &zio->io_bp_copy; /* so caller can free */ in zio_create()
541 if (zio->io_child_type == ZIO_CHILD_LOGICAL) in zio_create()
542 zio->io_logical = zio; in zio_create()
543 if (zio->io_child_type > ZIO_CHILD_GANG && BP_IS_GANG(bp)) in zio_create()
547 zio->io_spa = spa; in zio_create()
548 zio->io_txg = txg; in zio_create()
549 zio->io_done = done; in zio_create()
550 zio->io_private = private; in zio_create()
551 zio->io_type = type; in zio_create()
552 zio->io_priority = priority; in zio_create()
553 zio->io_vd = vd; in zio_create()
554 zio->io_offset = offset; in zio_create()
555 zio->io_orig_data = zio->io_data = data; in zio_create()
556 zio->io_orig_size = zio->io_size = size; in zio_create()
557 zio->io_orig_flags = zio->io_flags = flags; in zio_create()
558 zio->io_orig_stage = zio->io_stage = stage; in zio_create()
559 zio->io_orig_pipeline = zio->io_pipeline = pipeline; in zio_create()
561 zio->io_state[ZIO_WAIT_READY] = (stage >= ZIO_STAGE_READY); in zio_create()
562 zio->io_state[ZIO_WAIT_DONE] = (stage >= ZIO_STAGE_DONE); in zio_create()
565 zio->io_bookmark = *zb; in zio_create()
568 if (zio->io_logical == NULL) in zio_create()
569 zio->io_logical = pio->io_logical; in zio_create()
570 if (zio->io_child_type == ZIO_CHILD_GANG) in zio_create()
571 zio->io_gang_leader = pio->io_gang_leader; in zio_create()
572 zio_add_child(pio, zio); in zio_create()
575 return (zio); in zio_create()
579 zio_destroy(zio_t *zio) in zio_destroy() argument
581 list_destroy(&zio->io_parent_list); in zio_destroy()
582 list_destroy(&zio->io_child_list); in zio_destroy()
583 mutex_destroy(&zio->io_lock); in zio_destroy()
584 cv_destroy(&zio->io_cv); in zio_destroy()
585 kmem_cache_free(zio_cache, zio); in zio_destroy()
592 zio_t *zio; in zio_null() local
594 zio = zio_create(pio, spa, 0, NULL, NULL, 0, done, private, in zio_null()
598 return (zio); in zio_null()
694 zio_t *zio; in zio_read() local
698 zio = zio_create(pio, spa, BP_PHYSICAL_BIRTH(bp), bp, in zio_read()
704 return (zio); in zio_read()
714 zio_t *zio; in zio_write() local
725 zio = zio_create(pio, spa, txg, bp, data, size, done, private, in zio_write()
730 zio->io_ready = ready; in zio_write()
731 zio->io_physdone = physdone; in zio_write()
732 zio->io_prop = *zp; in zio_write()
740 if (data == NULL && zio->io_prop.zp_dedup_verify) { in zio_write()
741 zio->io_prop.zp_dedup = zio->io_prop.zp_dedup_verify = B_FALSE; in zio_write()
744 return (zio); in zio_write()
752 zio_t *zio; in zio_rewrite() local
754 zio = zio_create(pio, spa, txg, bp, data, size, done, private, in zio_rewrite()
758 return (zio); in zio_rewrite()
762 zio_write_override(zio_t *zio, blkptr_t *bp, int copies, boolean_t nopwrite) in zio_write_override() argument
764 ASSERT(zio->io_type == ZIO_TYPE_WRITE); in zio_write_override()
765 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_override()
766 ASSERT(zio->io_stage == ZIO_STAGE_OPEN); in zio_write_override()
767 ASSERT(zio->io_txg == spa_syncing_txg(zio->io_spa)); in zio_write_override()
774 zio->io_prop.zp_dedup = nopwrite ? B_FALSE : zio->io_prop.zp_dedup; in zio_write_override()
775 zio->io_prop.zp_nopwrite = nopwrite; in zio_write_override()
776 zio->io_prop.zp_copies = copies; in zio_write_override()
777 zio->io_bp_override = bp; in zio_write_override()
812 zio_t *zio; in zio_free_sync() local
833 zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), in zio_free_sync()
837 return (zio); in zio_free_sync()
844 zio_t *zio; in zio_claim() local
867 zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), in zio_claim()
871 return (zio); in zio_claim()
878 zio_t *zio; in zio_ioctl() local
882 zio = zio_create(pio, spa, 0, NULL, NULL, 0, done, private, in zio_ioctl()
886 zio->io_cmd = cmd; in zio_ioctl()
888 zio = zio_null(pio, spa, NULL, NULL, NULL, flags); in zio_ioctl()
891 zio_nowait(zio_ioctl(zio, spa, vd->vdev_child[c], cmd, in zio_ioctl()
895 return (zio); in zio_ioctl()
903 zio_t *zio; in zio_read_phys() local
910 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, done, private, in zio_read_phys()
914 zio->io_prop.zp_checksum = checksum; in zio_read_phys()
916 return (zio); in zio_read_phys()
924 zio_t *zio; in zio_write_phys() local
931 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, done, private, in zio_write_phys()
935 zio->io_prop.zp_checksum = checksum; in zio_write_phys()
946 zio_push_transform(zio, wbuf, size, size, NULL); in zio_write_phys()
949 return (zio); in zio_write_phys()
961 zio_t *zio; in zio_vdev_child_io() local
989 zio = zio_create(pio, pio->io_spa, pio->io_txg, bp, data, size, in zio_vdev_child_io()
993 zio->io_physdone = pio->io_physdone; in zio_vdev_child_io()
994 if (vd->vdev_ops->vdev_op_leaf && zio->io_logical != NULL) in zio_vdev_child_io()
995 zio->io_logical->io_phys_children++; in zio_vdev_child_io()
997 return (zio); in zio_vdev_child_io()
1005 zio_t *zio; in zio_vdev_delegated_io() local
1009 zio = zio_create(NULL, vd->vdev_spa, 0, NULL, in zio_vdev_delegated_io()
1015 return (zio); in zio_vdev_delegated_io()
1019 zio_flush(zio_t *zio, vdev_t *vd) in zio_flush() argument
1021 zio_nowait(zio_ioctl(zio, zio->io_spa, vd, DKIOCFLUSHWRITECACHE, in zio_flush()
1027 zio_shrink(zio_t *zio, uint64_t size) in zio_shrink() argument
1029 ASSERT(zio->io_executor == NULL); in zio_shrink()
1030 ASSERT(zio->io_orig_size == zio->io_size); in zio_shrink()
1031 ASSERT(size <= zio->io_size); in zio_shrink()
1038 ASSERT(BP_GET_COMPRESS(zio->io_bp) == ZIO_COMPRESS_OFF); in zio_shrink()
1039 if (!BP_IS_RAIDZ(zio->io_bp)) in zio_shrink()
1040 zio->io_orig_size = zio->io_size = size; in zio_shrink()
1050 zio_read_bp_init(zio_t *zio) in zio_read_bp_init() argument
1052 blkptr_t *bp = zio->io_bp; in zio_read_bp_init()
1055 zio->io_child_type == ZIO_CHILD_LOGICAL && in zio_read_bp_init()
1056 !(zio->io_flags & ZIO_FLAG_RAW)) { in zio_read_bp_init()
1061 zio_push_transform(zio, cbuf, psize, psize, zio_decompress); in zio_read_bp_init()
1065 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_read_bp_init()
1066 decode_embedded_bp_compressed(bp, zio->io_data); in zio_read_bp_init()
1072 zio->io_flags |= ZIO_FLAG_DONT_CACHE; in zio_read_bp_init()
1075 zio->io_flags |= ZIO_FLAG_DONT_CACHE; in zio_read_bp_init()
1077 if (BP_GET_DEDUP(bp) && zio->io_child_type == ZIO_CHILD_LOGICAL) in zio_read_bp_init()
1078 zio->io_pipeline = ZIO_DDT_READ_PIPELINE; in zio_read_bp_init()
1084 zio_write_bp_init(zio_t *zio) in zio_write_bp_init() argument
1086 spa_t *spa = zio->io_spa; in zio_write_bp_init()
1087 zio_prop_t *zp = &zio->io_prop; in zio_write_bp_init()
1089 blkptr_t *bp = zio->io_bp; in zio_write_bp_init()
1090 uint64_t lsize = zio->io_size; in zio_write_bp_init()
1098 if (zio_wait_for_children(zio, ZIO_CHILD_LOGICAL_BIT | in zio_write_bp_init()
1103 if (!IO_IS_ALLOCATING(zio)) in zio_write_bp_init()
1106 ASSERT(zio->io_child_type != ZIO_CHILD_DDT); in zio_write_bp_init()
1108 if (zio->io_bp_override) { in zio_write_bp_init()
1109 ASSERT(bp->blk_birth != zio->io_txg); in zio_write_bp_init()
1110 ASSERT(BP_GET_DEDUP(zio->io_bp_override) == 0); in zio_write_bp_init()
1112 *bp = *zio->io_bp_override; in zio_write_bp_init()
1113 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_write_bp_init()
1125 zio->io_flags |= ZIO_FLAG_NOPWRITE; in zio_write_bp_init()
1139 zio->io_pipeline |= ZIO_STAGE_DDT_WRITE; in zio_write_bp_init()
1144 if (!BP_IS_HOLE(bp) && bp->blk_birth == zio->io_txg) { in zio_write_bp_init()
1156 ASSERT(zio->io_txg == spa_syncing_txg(spa)); in zio_write_bp_init()
1157 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_bp_init()
1170 psize = zio_compress_data(compress, zio->io_data, cbuf, lsize); in zio_write_bp_init()
1180 BP_SET_TYPE(bp, zio->io_prop.zp_type); in zio_write_bp_init()
1181 BP_SET_LEVEL(bp, zio->io_prop.zp_level); in zio_write_bp_init()
1183 bp->blk_birth = zio->io_txg; in zio_write_bp_init()
1184 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_write_bp_init()
1207 zio_push_transform(zio, cbuf, in zio_write_bp_init()
1221 if (!BP_IS_HOLE(bp) && bp->blk_birth == zio->io_txg && in zio_write_bp_init()
1225 enum zio_stage gang_stages = zio->io_pipeline & ZIO_GANG_STAGES; in zio_write_bp_init()
1226 zio->io_pipeline = ZIO_REWRITE_PIPELINE | gang_stages; in zio_write_bp_init()
1227 zio->io_flags |= ZIO_FLAG_IO_REWRITE; in zio_write_bp_init()
1230 zio->io_pipeline = ZIO_WRITE_PIPELINE; in zio_write_bp_init()
1234 if (zio->io_bp_orig.blk_birth != 0 && in zio_write_bp_init()
1239 BP_SET_BIRTH(bp, zio->io_txg, 0); in zio_write_bp_init()
1241 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_write_bp_init()
1253 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_bp_init()
1254 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); in zio_write_bp_init()
1255 zio->io_pipeline = ZIO_DDT_WRITE_PIPELINE; in zio_write_bp_init()
1258 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_write_bp_init()
1259 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); in zio_write_bp_init()
1260 zio->io_pipeline |= ZIO_STAGE_NOP_WRITE; in zio_write_bp_init()
1268 zio_free_bp_init(zio_t *zio) in zio_free_bp_init() argument
1270 blkptr_t *bp = zio->io_bp; in zio_free_bp_init()
1272 if (zio->io_child_type == ZIO_CHILD_LOGICAL) { in zio_free_bp_init()
1274 zio->io_pipeline = ZIO_DDT_FREE_PIPELINE; in zio_free_bp_init()
1287 zio_taskq_dispatch(zio_t *zio, zio_taskq_type_t q, boolean_t cutinline) in zio_taskq_dispatch() argument
1289 spa_t *spa = zio->io_spa; in zio_taskq_dispatch()
1290 zio_type_t t = zio->io_type; in zio_taskq_dispatch()
1298 if (zio->io_flags & (ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_PROBE)) in zio_taskq_dispatch()
1304 if (t == ZIO_TYPE_WRITE && zio->io_vd && zio->io_vd->vdev_aux) in zio_taskq_dispatch()
1311 if (zio->io_priority == ZIO_PRIORITY_NOW && in zio_taskq_dispatch()
1322 ASSERT(zio->io_tqent.tqent_next == NULL); in zio_taskq_dispatch()
1323 spa_taskq_dispatch_ent(spa, t, q, (task_func_t *)zio_execute, zio, in zio_taskq_dispatch()
1324 flags, &zio->io_tqent); in zio_taskq_dispatch()
1328 zio_taskq_member(zio_t *zio, zio_taskq_type_t q) in zio_taskq_member() argument
1330 kthread_t *executor = zio->io_executor; in zio_taskq_member()
1331 spa_t *spa = zio->io_spa; in zio_taskq_member()
1346 zio_issue_async(zio_t *zio) in zio_issue_async() argument
1348 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_FALSE); in zio_issue_async()
1354 zio_interrupt(zio_t *zio) in zio_interrupt() argument
1356 zio_taskq_dispatch(zio, ZIO_TASKQ_INTERRUPT, B_FALSE); in zio_interrupt()
1378 zio_execute(zio_t *zio) in zio_execute() argument
1380 zio->io_executor = curthread; in zio_execute()
1382 while (zio->io_stage < ZIO_STAGE_DONE) { in zio_execute()
1383 enum zio_stage pipeline = zio->io_pipeline; in zio_execute()
1384 enum zio_stage stage = zio->io_stage; in zio_execute()
1387 ASSERT(!MUTEX_HELD(&zio->io_lock)); in zio_execute()
1389 ASSERT(zio->io_stall == NULL); in zio_execute()
1406 if ((stage & ZIO_BLOCKING_STAGES) && zio->io_vd == NULL && in zio_execute()
1407 zio_taskq_member(zio, ZIO_TASKQ_INTERRUPT)) { in zio_execute()
1410 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, cut); in zio_execute()
1414 zio->io_stage = stage; in zio_execute()
1415 rv = zio_pipeline[highbit64(stage) - 1](zio); in zio_execute()
1430 zio_wait(zio_t *zio) in zio_wait() argument
1434 ASSERT(zio->io_stage == ZIO_STAGE_OPEN); in zio_wait()
1435 ASSERT(zio->io_executor == NULL); in zio_wait()
1437 zio->io_waiter = curthread; in zio_wait()
1439 zio_execute(zio); in zio_wait()
1441 mutex_enter(&zio->io_lock); in zio_wait()
1442 while (zio->io_executor != NULL) in zio_wait()
1443 cv_wait(&zio->io_cv, &zio->io_lock); in zio_wait()
1444 mutex_exit(&zio->io_lock); in zio_wait()
1446 error = zio->io_error; in zio_wait()
1447 zio_destroy(zio); in zio_wait()
1453 zio_nowait(zio_t *zio) in zio_nowait() argument
1455 ASSERT(zio->io_executor == NULL); in zio_nowait()
1457 if (zio->io_child_type == ZIO_CHILD_LOGICAL && in zio_nowait()
1458 zio_unique_parent(zio) == NULL) { in zio_nowait()
1464 spa_t *spa = zio->io_spa; in zio_nowait()
1466 zio_add_child(spa->spa_async_zio_root[CPU_SEQID], zio); in zio_nowait()
1469 zio_execute(zio); in zio_nowait()
1528 zio_suspend(spa_t *spa, zio_t *zio) in zio_suspend() argument
1546 if (zio != NULL) { in zio_suspend()
1547 ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER)); in zio_suspend()
1548 ASSERT(zio != spa->spa_suspend_zio_root); in zio_suspend()
1549 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_suspend()
1550 ASSERT(zio_unique_parent(zio) == NULL); in zio_suspend()
1551 ASSERT(zio->io_stage == ZIO_STAGE_DONE); in zio_suspend()
1552 zio_add_child(spa->spa_suspend_zio_root, zio); in zio_suspend()
1669 zio_t *zio; in zio_rewrite_gang() local
1672 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, in zio_rewrite_gang()
1685 zio_checksum_compute(zio, BP_GET_CHECKSUM(bp), in zio_rewrite_gang()
1693 zio->io_pipeline &= ~ZIO_VDEV_IO_STAGES; in zio_rewrite_gang()
1695 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, in zio_rewrite_gang()
1700 return (zio); in zio_rewrite_gang()
1728 static void zio_gang_tree_assemble_done(zio_t *zio);
1785 zio_gang_tree_assemble_done(zio_t *zio) in zio_gang_tree_assemble_done() argument
1787 zio_t *gio = zio->io_gang_leader; in zio_gang_tree_assemble_done()
1788 zio_gang_node_t *gn = zio->io_private; in zio_gang_tree_assemble_done()
1789 blkptr_t *bp = zio->io_bp; in zio_gang_tree_assemble_done()
1791 ASSERT(gio == zio_unique_parent(zio)); in zio_gang_tree_assemble_done()
1792 ASSERT(zio->io_child_count == 0); in zio_gang_tree_assemble_done()
1794 if (zio->io_error) in zio_gang_tree_assemble_done()
1798 byteswap_uint64_array(zio->io_data, zio->io_size); in zio_gang_tree_assemble_done()
1800 ASSERT(zio->io_data == gn->gn_gbh); in zio_gang_tree_assemble_done()
1801 ASSERT(zio->io_size == SPA_GANGBLOCKSIZE); in zio_gang_tree_assemble_done()
1816 zio_t *zio; in zio_gang_tree_issue() local
1826 zio = zio_gang_issue_func[gio->io_type](pio, bp, gn, data); in zio_gang_tree_issue()
1835 zio_gang_tree_issue(zio, gn->gn_child[g], gbp, data); in zio_gang_tree_issue()
1843 if (zio != pio) in zio_gang_tree_issue()
1844 zio_nowait(zio); in zio_gang_tree_issue()
1848 zio_gang_assemble(zio_t *zio) in zio_gang_assemble() argument
1850 blkptr_t *bp = zio->io_bp; in zio_gang_assemble()
1852 ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == NULL); in zio_gang_assemble()
1853 ASSERT(zio->io_child_type > ZIO_CHILD_GANG); in zio_gang_assemble()
1855 zio->io_gang_leader = zio; in zio_gang_assemble()
1857 zio_gang_tree_assemble(zio, bp, &zio->io_gang_tree); in zio_gang_assemble()
1863 zio_gang_issue(zio_t *zio) in zio_gang_issue() argument
1865 blkptr_t *bp = zio->io_bp; in zio_gang_issue()
1867 if (zio_wait_for_children(zio, ZIO_CHILD_GANG_BIT, ZIO_WAIT_DONE)) { in zio_gang_issue()
1871 ASSERT(BP_IS_GANG(bp) && zio->io_gang_leader == zio); in zio_gang_issue()
1872 ASSERT(zio->io_child_type > ZIO_CHILD_GANG); in zio_gang_issue()
1874 if (zio->io_child_error[ZIO_CHILD_GANG] == 0) in zio_gang_issue()
1875 zio_gang_tree_issue(zio, zio->io_gang_tree, bp, zio->io_data); in zio_gang_issue()
1877 zio_gang_tree_free(&zio->io_gang_tree); in zio_gang_issue()
1879 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_gang_issue()
1885 zio_write_gang_member_ready(zio_t *zio) in zio_write_gang_member_ready() argument
1887 zio_t *pio = zio_unique_parent(zio); in zio_write_gang_member_ready()
1888 zio_t *gio = zio->io_gang_leader; in zio_write_gang_member_ready()
1889 dva_t *cdva = zio->io_bp->blk_dva; in zio_write_gang_member_ready()
1893 if (BP_IS_HOLE(zio->io_bp)) in zio_write_gang_member_ready()
1896 ASSERT(BP_IS_HOLE(&zio->io_bp_orig)); in zio_write_gang_member_ready()
1898 ASSERT(zio->io_child_type == ZIO_CHILD_GANG); in zio_write_gang_member_ready()
1899 ASSERT3U(zio->io_prop.zp_copies, ==, gio->io_prop.zp_copies); in zio_write_gang_member_ready()
1900 ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(zio->io_bp)); in zio_write_gang_member_ready()
1902 ASSERT3U(BP_GET_NDVAS(zio->io_bp), <=, BP_GET_NDVAS(pio->io_bp)); in zio_write_gang_member_ready()
1905 for (int d = 0; d < BP_GET_NDVAS(zio->io_bp); d++) { in zio_write_gang_member_ready()
1920 zio_t *zio; in zio_write_gang_block() local
1953 zio = zio_rewrite(pio, spa, txg, bp, gbh, SPA_GANGBLOCKSIZE, NULL, NULL, in zio_write_gang_block()
1973 zio_nowait(zio_write(zio, spa, txg, &gbh->zg_blkptr[g], in zio_write_gang_block()
1985 zio_nowait(zio); in zio_write_gang_block()
1999 zio_nop_write(zio_t *zio) in zio_nop_write() argument
2001 blkptr_t *bp = zio->io_bp; in zio_nop_write()
2002 blkptr_t *bp_orig = &zio->io_bp_orig; in zio_nop_write()
2003 zio_prop_t *zp = &zio->io_prop; in zio_nop_write()
2006 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE)); in zio_nop_write()
2009 ASSERT(zio->io_bp_override == NULL); in zio_nop_write()
2010 ASSERT(IO_IS_ALLOCATING(zio)); in zio_nop_write()
2039 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_nop_write()
2040 zio->io_flags |= ZIO_FLAG_NOPWRITE; in zio_nop_write()
2052 zio_ddt_child_read_done(zio_t *zio) in zio_ddt_child_read_done() argument
2054 blkptr_t *bp = zio->io_bp; in zio_ddt_child_read_done()
2055 ddt_entry_t *dde = zio->io_private; in zio_ddt_child_read_done()
2057 zio_t *pio = zio_unique_parent(zio); in zio_ddt_child_read_done()
2061 if (zio->io_error == 0) in zio_ddt_child_read_done()
2063 if (zio->io_error == 0 && dde->dde_repair_data == NULL) in zio_ddt_child_read_done()
2064 dde->dde_repair_data = zio->io_data; in zio_ddt_child_read_done()
2066 zio_buf_free(zio->io_data, zio->io_size); in zio_ddt_child_read_done()
2071 zio_ddt_read_start(zio_t *zio) in zio_ddt_read_start() argument
2073 blkptr_t *bp = zio->io_bp; in zio_ddt_read_start()
2076 ASSERT(BP_GET_PSIZE(bp) == zio->io_size); in zio_ddt_read_start()
2077 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_ddt_read_start()
2079 if (zio->io_child_error[ZIO_CHILD_DDT]) { in zio_ddt_read_start()
2080 ddt_t *ddt = ddt_select(zio->io_spa, bp); in zio_ddt_read_start()
2086 ASSERT(zio->io_vsd == NULL); in zio_ddt_read_start()
2087 zio->io_vsd = dde; in zio_ddt_read_start()
2097 zio_nowait(zio_read(zio, zio->io_spa, &blk, in zio_ddt_read_start()
2098 zio_buf_alloc(zio->io_size), zio->io_size, in zio_ddt_read_start()
2099 zio_ddt_child_read_done, dde, zio->io_priority, in zio_ddt_read_start()
2100 ZIO_DDT_CHILD_FLAGS(zio) | ZIO_FLAG_DONT_PROPAGATE, in zio_ddt_read_start()
2101 &zio->io_bookmark)); in zio_ddt_read_start()
2106 zio_nowait(zio_read(zio, zio->io_spa, bp, in zio_ddt_read_start()
2107 zio->io_data, zio->io_size, NULL, NULL, zio->io_priority, in zio_ddt_read_start()
2108 ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark)); in zio_ddt_read_start()
2114 zio_ddt_read_done(zio_t *zio) in zio_ddt_read_done() argument
2116 blkptr_t *bp = zio->io_bp; in zio_ddt_read_done()
2118 if (zio_wait_for_children(zio, ZIO_CHILD_DDT_BIT, ZIO_WAIT_DONE)) { in zio_ddt_read_done()
2123 ASSERT(BP_GET_PSIZE(bp) == zio->io_size); in zio_ddt_read_done()
2124 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_ddt_read_done()
2126 if (zio->io_child_error[ZIO_CHILD_DDT]) { in zio_ddt_read_done()
2127 ddt_t *ddt = ddt_select(zio->io_spa, bp); in zio_ddt_read_done()
2128 ddt_entry_t *dde = zio->io_vsd; in zio_ddt_read_done()
2130 ASSERT(spa_load_state(zio->io_spa) != SPA_LOAD_NONE); in zio_ddt_read_done()
2134 zio->io_stage = ZIO_STAGE_DDT_READ_START >> 1; in zio_ddt_read_done()
2135 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, B_FALSE); in zio_ddt_read_done()
2139 bcopy(dde->dde_repair_data, zio->io_data, zio->io_size); in zio_ddt_read_done()
2140 zio->io_child_error[ZIO_CHILD_DDT] = 0; in zio_ddt_read_done()
2143 zio->io_vsd = NULL; in zio_ddt_read_done()
2146 ASSERT(zio->io_vsd == NULL); in zio_ddt_read_done()
2152 zio_ddt_collision(zio_t *zio, ddt_t *ddt, ddt_entry_t *dde) in zio_ddt_collision() argument
2154 spa_t *spa = zio->io_spa; in zio_ddt_collision()
2166 return (lio->io_orig_size != zio->io_orig_size || in zio_ddt_collision()
2167 bcmp(zio->io_orig_data, lio->io_orig_data, in zio_ddt_collision()
2168 zio->io_orig_size) != 0); in zio_ddt_collision()
2178 blkptr_t blk = *zio->io_bp; in zio_ddt_collision()
2188 &aflags, &zio->io_bookmark); in zio_ddt_collision()
2191 if (arc_buf_size(abuf) != zio->io_orig_size || in zio_ddt_collision()
2192 bcmp(abuf->b_data, zio->io_orig_data, in zio_ddt_collision()
2193 zio->io_orig_size) != 0) in zio_ddt_collision()
2207 zio_ddt_child_write_ready(zio_t *zio) in zio_ddt_child_write_ready() argument
2209 int p = zio->io_prop.zp_copies; in zio_ddt_child_write_ready()
2210 ddt_t *ddt = ddt_select(zio->io_spa, zio->io_bp); in zio_ddt_child_write_ready()
2211 ddt_entry_t *dde = zio->io_private; in zio_ddt_child_write_ready()
2215 if (zio->io_error) in zio_ddt_child_write_ready()
2220 ASSERT(dde->dde_lead_zio[p] == zio); in zio_ddt_child_write_ready()
2222 ddt_phys_fill(ddp, zio->io_bp); in zio_ddt_child_write_ready()
2224 while ((pio = zio_walk_parents(zio)) != NULL) in zio_ddt_child_write_ready()
2225 ddt_bp_fill(ddp, pio->io_bp, zio->io_txg); in zio_ddt_child_write_ready()
2231 zio_ddt_child_write_done(zio_t *zio) in zio_ddt_child_write_done() argument
2233 int p = zio->io_prop.zp_copies; in zio_ddt_child_write_done()
2234 ddt_t *ddt = ddt_select(zio->io_spa, zio->io_bp); in zio_ddt_child_write_done()
2235 ddt_entry_t *dde = zio->io_private; in zio_ddt_child_write_done()
2241 ASSERT(dde->dde_lead_zio[p] == zio); in zio_ddt_child_write_done()
2244 if (zio->io_error == 0) { in zio_ddt_child_write_done()
2245 while (zio_walk_parents(zio) != NULL) in zio_ddt_child_write_done()
2255 zio_ddt_ditto_write_done(zio_t *zio) in zio_ddt_ditto_write_done() argument
2258 zio_prop_t *zp = &zio->io_prop; in zio_ddt_ditto_write_done()
2259 blkptr_t *bp = zio->io_bp; in zio_ddt_ditto_write_done()
2260 ddt_t *ddt = ddt_select(zio->io_spa, bp); in zio_ddt_ditto_write_done()
2261 ddt_entry_t *dde = zio->io_private; in zio_ddt_ditto_write_done()
2268 ASSERT(dde->dde_lead_zio[p] == zio); in zio_ddt_ditto_write_done()
2271 if (zio->io_error == 0) { in zio_ddt_ditto_write_done()
2276 ddt_phys_free(ddt, ddk, ddp, zio->io_txg); in zio_ddt_ditto_write_done()
2284 zio_ddt_write(zio_t *zio) in zio_ddt_write() argument
2286 spa_t *spa = zio->io_spa; in zio_ddt_write()
2287 blkptr_t *bp = zio->io_bp; in zio_ddt_write()
2288 uint64_t txg = zio->io_txg; in zio_ddt_write()
2289 zio_prop_t *zp = &zio->io_prop; in zio_ddt_write()
2300 ASSERT(BP_IS_HOLE(bp) || zio->io_bp_override); in zio_ddt_write()
2306 if (zp->zp_dedup_verify && zio_ddt_collision(zio, ddt, dde)) { in zio_ddt_write()
2315 zio_pop_transforms(zio); in zio_ddt_write()
2316 zio->io_stage = ZIO_STAGE_OPEN; in zio_ddt_write()
2321 zio->io_pipeline = ZIO_WRITE_PIPELINE; in zio_ddt_write()
2342 if (zio->io_bp_override) { in zio_ddt_write()
2343 zio_pop_transforms(zio); in zio_ddt_write()
2344 zio->io_stage = ZIO_STAGE_OPEN; in zio_ddt_write()
2345 zio->io_pipeline = ZIO_WRITE_PIPELINE; in zio_ddt_write()
2346 zio->io_bp_override = NULL; in zio_ddt_write()
2352 dio = zio_write(zio, spa, txg, bp, zio->io_orig_data, in zio_ddt_write()
2353 zio->io_orig_size, &czp, NULL, NULL, in zio_ddt_write()
2354 zio_ddt_ditto_write_done, dde, zio->io_priority, in zio_ddt_write()
2355 ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark); in zio_ddt_write()
2357 zio_push_transform(dio, zio->io_data, zio->io_size, 0, NULL); in zio_ddt_write()
2365 zio_add_child(zio, dde->dde_lead_zio[p]); in zio_ddt_write()
2368 } else if (zio->io_bp_override) { in zio_ddt_write()
2370 ASSERT(BP_EQUAL(bp, zio->io_bp_override)); in zio_ddt_write()
2374 cio = zio_write(zio, spa, txg, bp, zio->io_orig_data, in zio_ddt_write()
2375 zio->io_orig_size, zp, zio_ddt_child_write_ready, NULL, in zio_ddt_write()
2376 zio_ddt_child_write_done, dde, zio->io_priority, in zio_ddt_write()
2377 ZIO_DDT_CHILD_FLAGS(zio), &zio->io_bookmark); in zio_ddt_write()
2379 zio_push_transform(cio, zio->io_data, zio->io_size, 0, NULL); in zio_ddt_write()
2396 zio_ddt_free(zio_t *zio) in zio_ddt_free() argument
2398 spa_t *spa = zio->io_spa; in zio_ddt_free()
2399 blkptr_t *bp = zio->io_bp; in zio_ddt_free()
2405 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_ddt_free()
2422 zio_dva_allocate(zio_t *zio) in zio_dva_allocate() argument
2424 spa_t *spa = zio->io_spa; in zio_dva_allocate()
2426 blkptr_t *bp = zio->io_bp; in zio_dva_allocate()
2430 if (zio->io_gang_leader == NULL) { in zio_dva_allocate()
2431 ASSERT(zio->io_child_type > ZIO_CHILD_GANG); in zio_dva_allocate()
2432 zio->io_gang_leader = zio; in zio_dva_allocate()
2437 ASSERT3U(zio->io_prop.zp_copies, >, 0); in zio_dva_allocate()
2438 ASSERT3U(zio->io_prop.zp_copies, <=, spa_max_replication(spa)); in zio_dva_allocate()
2439 ASSERT3U(zio->io_size, ==, BP_GET_PSIZE(bp)); in zio_dva_allocate()
2446 flags |= (zio->io_flags & ZIO_FLAG_NODATA) ? METASLAB_GANG_AVOID : 0; in zio_dva_allocate()
2447 flags |= (zio->io_flags & ZIO_FLAG_GANG_CHILD) ? in zio_dva_allocate()
2449 error = metaslab_alloc(spa, mc, zio->io_size, bp, in zio_dva_allocate()
2450 zio->io_prop.zp_copies, zio->io_txg, NULL, flags); in zio_dva_allocate()
2454 "size %llu, error %d", spa_name(spa), zio, zio->io_size, in zio_dva_allocate()
2456 if (error == ENOSPC && zio->io_size > SPA_MINBLOCKSIZE) in zio_dva_allocate()
2457 return (zio_write_gang_block(zio)); in zio_dva_allocate()
2458 zio->io_error = error; in zio_dva_allocate()
2465 zio_dva_free(zio_t *zio) in zio_dva_free() argument
2467 metaslab_free(zio->io_spa, zio->io_bp, zio->io_txg, B_FALSE); in zio_dva_free()
2473 zio_dva_claim(zio_t *zio) in zio_dva_claim() argument
2477 error = metaslab_claim(zio->io_spa, zio->io_bp, zio->io_txg); in zio_dva_claim()
2479 zio->io_error = error; in zio_dva_claim()
2490 zio_dva_unallocate(zio_t *zio, zio_gang_node_t *gn, blkptr_t *bp) in zio_dva_unallocate() argument
2492 ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp)); in zio_dva_unallocate()
2493 ASSERT(zio->io_bp_override == NULL); in zio_dva_unallocate()
2496 metaslab_free(zio->io_spa, bp, bp->blk_birth, B_TRUE); in zio_dva_unallocate()
2500 zio_dva_unallocate(zio, gn->gn_child[g], in zio_dva_unallocate()
2580 zio_vdev_io_start(zio_t *zio) in zio_vdev_io_start() argument
2582 vdev_t *vd = zio->io_vd; in zio_vdev_io_start()
2584 spa_t *spa = zio->io_spa; in zio_vdev_io_start()
2586 ASSERT(zio->io_error == 0); in zio_vdev_io_start()
2587 ASSERT(zio->io_child_error[ZIO_CHILD_VDEV] == 0); in zio_vdev_io_start()
2590 if (!(zio->io_flags & ZIO_FLAG_CONFIG_WRITER)) in zio_vdev_io_start()
2591 spa_config_enter(spa, SCL_ZIO, zio, RW_READER); in zio_vdev_io_start()
2596 vdev_mirror_ops.vdev_op_io_start(zio); in zio_vdev_io_start()
2610 if (!(zio->io_flags & ZIO_FLAG_SCAN_THREAD) && zio->io_bp != NULL && in zio_vdev_io_start()
2612 zio->io_bookmark.zb_objset != DMU_META_OBJSET && in zio_vdev_io_start()
2613 zio->io_txg != spa_syncing_txg(spa)) { in zio_vdev_io_start()
2622 if (!(zio->io_flags & ZIO_FLAG_PHYSICAL) && in zio_vdev_io_start()
2623 P2PHASE(zio->io_size, align) != 0) { in zio_vdev_io_start()
2625 uint64_t asize = P2ROUNDUP(zio->io_size, align); in zio_vdev_io_start()
2628 if (zio->io_type == ZIO_TYPE_WRITE) { in zio_vdev_io_start()
2629 bcopy(zio->io_data, abuf, zio->io_size); in zio_vdev_io_start()
2630 bzero(abuf + zio->io_size, asize - zio->io_size); in zio_vdev_io_start()
2632 zio_push_transform(zio, abuf, asize, asize, zio_subblock); in zio_vdev_io_start()
2639 if (!(zio->io_flags & ZIO_FLAG_PHYSICAL)) { in zio_vdev_io_start()
2640 ASSERT0(P2PHASE(zio->io_offset, align)); in zio_vdev_io_start()
2641 ASSERT0(P2PHASE(zio->io_size, align)); in zio_vdev_io_start()
2647 ASSERT0(P2PHASE(zio->io_offset, SPA_MINBLOCKSIZE)); in zio_vdev_io_start()
2648 ASSERT0(P2PHASE(zio->io_size, SPA_MINBLOCKSIZE)); in zio_vdev_io_start()
2651 VERIFY(zio->io_type != ZIO_TYPE_WRITE || spa_writeable(spa)); in zio_vdev_io_start()
2666 if ((zio->io_flags & ZIO_FLAG_IO_REPAIR) && in zio_vdev_io_start()
2667 !(zio->io_flags & ZIO_FLAG_SELF_HEAL) && in zio_vdev_io_start()
2668 zio->io_txg != 0 && /* not a delegated i/o */ in zio_vdev_io_start()
2669 !vdev_dtl_contains(vd, DTL_PARTIAL, zio->io_txg, 1)) { in zio_vdev_io_start()
2670 ASSERT(zio->io_type == ZIO_TYPE_WRITE); in zio_vdev_io_start()
2671 zio_vdev_io_bypass(zio); in zio_vdev_io_start()
2676 (zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE)) { in zio_vdev_io_start()
2678 if (zio->io_type == ZIO_TYPE_READ && vdev_cache_read(zio)) in zio_vdev_io_start()
2681 if ((zio = vdev_queue_io(zio)) == NULL) in zio_vdev_io_start()
2684 if (!vdev_accessible(vd, zio)) { in zio_vdev_io_start()
2685 zio->io_error = SET_ERROR(ENXIO); in zio_vdev_io_start()
2686 zio_interrupt(zio); in zio_vdev_io_start()
2691 vd->vdev_ops->vdev_op_io_start(zio); in zio_vdev_io_start()
2696 zio_vdev_io_done(zio_t *zio) in zio_vdev_io_done() argument
2698 vdev_t *vd = zio->io_vd; in zio_vdev_io_done()
2702 if (zio_wait_for_children(zio, ZIO_CHILD_VDEV_BIT, ZIO_WAIT_DONE)) { in zio_vdev_io_done()
2706 ASSERT(zio->io_type == ZIO_TYPE_READ || zio->io_type == ZIO_TYPE_WRITE); in zio_vdev_io_done()
2710 vdev_queue_io_done(zio); in zio_vdev_io_done()
2712 if (zio->io_type == ZIO_TYPE_WRITE) in zio_vdev_io_done()
2713 vdev_cache_write(zio); in zio_vdev_io_done()
2715 if (zio_injection_enabled && zio->io_error == 0) in zio_vdev_io_done()
2716 zio->io_error = zio_handle_device_injection(vd, in zio_vdev_io_done()
2717 zio, EIO); in zio_vdev_io_done()
2719 if (zio_injection_enabled && zio->io_error == 0) in zio_vdev_io_done()
2720 zio->io_error = zio_handle_label_injection(zio, EIO); in zio_vdev_io_done()
2722 if (zio->io_error) { in zio_vdev_io_done()
2723 if (!vdev_accessible(vd, zio)) { in zio_vdev_io_done()
2724 zio->io_error = SET_ERROR(ENXIO); in zio_vdev_io_done()
2731 ops->vdev_op_io_done(zio); in zio_vdev_io_done()
2734 VERIFY(vdev_probe(vd, zio) == NULL); in zio_vdev_io_done()
2753 zio_vsd_default_cksum_report(zio_t *zio, zio_cksum_report_t *zcr, void *ignored) in zio_vsd_default_cksum_report() argument
2755 void *buf = zio_buf_alloc(zio->io_size); in zio_vsd_default_cksum_report()
2757 bcopy(zio->io_data, buf, zio->io_size); in zio_vsd_default_cksum_report()
2759 zcr->zcr_cbinfo = zio->io_size; in zio_vsd_default_cksum_report()
2766 zio_vdev_io_assess(zio_t *zio) in zio_vdev_io_assess() argument
2768 vdev_t *vd = zio->io_vd; in zio_vdev_io_assess()
2770 if (zio_wait_for_children(zio, ZIO_CHILD_VDEV_BIT, ZIO_WAIT_DONE)) { in zio_vdev_io_assess()
2774 if (vd == NULL && !(zio->io_flags & ZIO_FLAG_CONFIG_WRITER)) in zio_vdev_io_assess()
2775 spa_config_exit(zio->io_spa, SCL_ZIO, zio); in zio_vdev_io_assess()
2777 if (zio->io_vsd != NULL) { in zio_vdev_io_assess()
2778 zio->io_vsd_ops->vsd_free(zio); in zio_vdev_io_assess()
2779 zio->io_vsd = NULL; in zio_vdev_io_assess()
2782 if (zio_injection_enabled && zio->io_error == 0) in zio_vdev_io_assess()
2783 zio->io_error = zio_handle_fault_injection(zio, EIO); in zio_vdev_io_assess()
2791 if (zio->io_error && vd == NULL && in zio_vdev_io_assess()
2792 !(zio->io_flags & (ZIO_FLAG_DONT_RETRY | ZIO_FLAG_IO_RETRY))) { in zio_vdev_io_assess()
2793 ASSERT(!(zio->io_flags & ZIO_FLAG_DONT_QUEUE)); /* not a leaf */ in zio_vdev_io_assess()
2794 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_BYPASS)); /* not a leaf */ in zio_vdev_io_assess()
2795 zio->io_error = 0; in zio_vdev_io_assess()
2796 zio->io_flags |= ZIO_FLAG_IO_RETRY | in zio_vdev_io_assess()
2798 zio->io_stage = ZIO_STAGE_VDEV_IO_START >> 1; in zio_vdev_io_assess()
2799 zio_taskq_dispatch(zio, ZIO_TASKQ_ISSUE, in zio_vdev_io_assess()
2808 if (zio->io_error && vd != NULL && vd->vdev_ops->vdev_op_leaf && in zio_vdev_io_assess()
2809 !vdev_accessible(vd, zio)) in zio_vdev_io_assess()
2810 zio->io_error = SET_ERROR(ENXIO); in zio_vdev_io_assess()
2816 if (zio->io_error == ENXIO && zio->io_type == ZIO_TYPE_WRITE && in zio_vdev_io_assess()
2821 if (zio->io_error) in zio_vdev_io_assess()
2822 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_vdev_io_assess()
2825 zio->io_physdone != NULL) { in zio_vdev_io_assess()
2826 ASSERT(!(zio->io_flags & ZIO_FLAG_DELEGATED)); in zio_vdev_io_assess()
2827 ASSERT(zio->io_child_type == ZIO_CHILD_VDEV); in zio_vdev_io_assess()
2828 zio->io_physdone(zio->io_logical); in zio_vdev_io_assess()
2835 zio_vdev_io_reissue(zio_t *zio) in zio_vdev_io_reissue() argument
2837 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); in zio_vdev_io_reissue()
2838 ASSERT(zio->io_error == 0); in zio_vdev_io_reissue()
2840 zio->io_stage >>= 1; in zio_vdev_io_reissue()
2844 zio_vdev_io_redone(zio_t *zio) in zio_vdev_io_redone() argument
2846 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_DONE); in zio_vdev_io_redone()
2848 zio->io_stage >>= 1; in zio_vdev_io_redone()
2852 zio_vdev_io_bypass(zio_t *zio) in zio_vdev_io_bypass() argument
2854 ASSERT(zio->io_stage == ZIO_STAGE_VDEV_IO_START); in zio_vdev_io_bypass()
2855 ASSERT(zio->io_error == 0); in zio_vdev_io_bypass()
2857 zio->io_flags |= ZIO_FLAG_IO_BYPASS; in zio_vdev_io_bypass()
2858 zio->io_stage = ZIO_STAGE_VDEV_IO_ASSESS >> 1; in zio_vdev_io_bypass()
2867 zio_checksum_generate(zio_t *zio) in zio_checksum_generate() argument
2869 blkptr_t *bp = zio->io_bp; in zio_checksum_generate()
2877 checksum = zio->io_prop.zp_checksum; in zio_checksum_generate()
2884 if (BP_IS_GANG(bp) && zio->io_child_type == ZIO_CHILD_GANG) { in zio_checksum_generate()
2885 ASSERT(!IO_IS_ALLOCATING(zio)); in zio_checksum_generate()
2892 zio_checksum_compute(zio, checksum, zio->io_data, zio->io_size); in zio_checksum_generate()
2898 zio_checksum_verify(zio_t *zio) in zio_checksum_verify() argument
2901 blkptr_t *bp = zio->io_bp; in zio_checksum_verify()
2904 ASSERT(zio->io_vd != NULL); in zio_checksum_verify()
2911 if (zio->io_prop.zp_checksum == ZIO_CHECKSUM_OFF) in zio_checksum_verify()
2914 ASSERT(zio->io_prop.zp_checksum == ZIO_CHECKSUM_LABEL); in zio_checksum_verify()
2917 if ((error = zio_checksum_error(zio, &info)) != 0) { in zio_checksum_verify()
2918 zio->io_error = error; in zio_checksum_verify()
2920 !(zio->io_flags & ZIO_FLAG_SPECULATIVE)) { in zio_checksum_verify()
2921 zfs_ereport_start_checksum(zio->io_spa, in zio_checksum_verify()
2922 zio->io_vd, zio, zio->io_offset, in zio_checksum_verify()
2923 zio->io_size, NULL, &info); in zio_checksum_verify()
2934 zio_checksum_verified(zio_t *zio) in zio_checksum_verified() argument
2936 zio->io_pipeline &= ~ZIO_STAGE_CHECKSUM_VERIFY; in zio_checksum_verified()
2971 zio_ready(zio_t *zio) in zio_ready() argument
2973 blkptr_t *bp = zio->io_bp; in zio_ready()
2976 if (zio_wait_for_children(zio, ZIO_CHILD_GANG_BIT | ZIO_CHILD_DDT_BIT, in zio_ready()
2981 if (zio->io_ready) { in zio_ready()
2982 ASSERT(IO_IS_ALLOCATING(zio)); in zio_ready()
2983 ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp) || in zio_ready()
2984 (zio->io_flags & ZIO_FLAG_NOPWRITE)); in zio_ready()
2985 ASSERT(zio->io_children[ZIO_CHILD_GANG][ZIO_WAIT_READY] == 0); in zio_ready()
2987 zio->io_ready(zio); in zio_ready()
2990 if (bp != NULL && bp != &zio->io_bp_copy) in zio_ready()
2991 zio->io_bp_copy = *bp; in zio_ready()
2993 if (zio->io_error) in zio_ready()
2994 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_ready()
2996 mutex_enter(&zio->io_lock); in zio_ready()
2997 zio->io_state[ZIO_WAIT_READY] = 1; in zio_ready()
2998 pio = zio_walk_parents(zio); in zio_ready()
2999 mutex_exit(&zio->io_lock); in zio_ready()
3009 pio_next = zio_walk_parents(zio); in zio_ready()
3010 zio_notify_parent(pio, zio, ZIO_WAIT_READY); in zio_ready()
3013 if (zio->io_flags & ZIO_FLAG_NODATA) { in zio_ready()
3015 zio->io_flags &= ~ZIO_FLAG_NODATA; in zio_ready()
3017 ASSERT((uintptr_t)zio->io_data < SPA_MAXBLOCKSIZE); in zio_ready()
3018 zio->io_pipeline &= ~ZIO_VDEV_IO_STAGES; in zio_ready()
3023 zio->io_spa->spa_syncing_txg == zio->io_txg) in zio_ready()
3024 zio_handle_ignored_writes(zio); in zio_ready()
3030 zio_done(zio_t *zio) in zio_done() argument
3032 spa_t *spa = zio->io_spa; in zio_done()
3033 zio_t *lio = zio->io_logical; in zio_done()
3034 blkptr_t *bp = zio->io_bp; in zio_done()
3035 vdev_t *vd = zio->io_vd; in zio_done()
3036 uint64_t psize = zio->io_size; in zio_done()
3043 if (zio_wait_for_children(zio, ZIO_CHILD_ALL_BITS, ZIO_WAIT_DONE)) { in zio_done()
3049 ASSERT(zio->io_children[c][w] == 0); in zio_done()
3054 ASSERT(bcmp(bp, &zio->io_bp_copy, sizeof (blkptr_t)) == 0 || in zio_done()
3055 (bp == zio_unique_parent(zio)->io_bp)); in zio_done()
3056 if (zio->io_type == ZIO_TYPE_WRITE && !BP_IS_HOLE(bp) && in zio_done()
3057 zio->io_bp_override == NULL && in zio_done()
3058 !(zio->io_flags & ZIO_FLAG_IO_REPAIR)) { in zio_done()
3060 ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(bp)); in zio_done()
3064 if (zio->io_flags & ZIO_FLAG_NOPWRITE) in zio_done()
3065 VERIFY(BP_EQUAL(bp, &zio->io_bp_orig)); in zio_done()
3071 zio_inherit_child_errors(zio, ZIO_CHILD_VDEV); in zio_done()
3072 zio_inherit_child_errors(zio, ZIO_CHILD_GANG); in zio_done()
3073 zio_inherit_child_errors(zio, ZIO_CHILD_DDT); in zio_done()
3079 if (zio->io_error == 0) { in zio_done()
3080 while (zio->io_cksum_report != NULL) { in zio_done()
3081 zio_cksum_report_t *zcr = zio->io_cksum_report; in zio_done()
3084 char *abuf = zio->io_data; in zio_done()
3088 bcopy(zio->io_data, abuf, psize); in zio_done()
3092 zio->io_cksum_report = zcr->zcr_next; in zio_done()
3102 zio_pop_transforms(zio); /* note: may set zio->io_error */ in zio_done()
3104 vdev_stat_update(zio, psize); in zio_done()
3106 if (zio->io_error) { in zio_done()
3113 if (zio->io_error != ECKSUM && vd != NULL && !vdev_is_dead(vd)) in zio_done()
3114 zfs_ereport_post(FM_EREPORT_ZFS_IO, spa, vd, zio, 0, 0); in zio_done()
3116 if ((zio->io_error == EIO || !(zio->io_flags & in zio_done()
3118 zio == lio) { in zio_done()
3123 spa_log_error(spa, zio); in zio_done()
3124 zfs_ereport_post(FM_EREPORT_ZFS_DATA, spa, NULL, zio, in zio_done()
3129 if (zio->io_error && zio == lio) { in zio_done()
3135 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_done()
3137 if (IO_IS_ALLOCATING(zio) && in zio_done()
3138 !(zio->io_flags & ZIO_FLAG_CANFAIL)) { in zio_done()
3139 if (zio->io_error != ENOSPC) in zio_done()
3140 zio->io_reexecute |= ZIO_REEXECUTE_NOW; in zio_done()
3142 zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; in zio_done()
3145 if ((zio->io_type == ZIO_TYPE_READ || in zio_done()
3146 zio->io_type == ZIO_TYPE_FREE) && in zio_done()
3147 !(zio->io_flags & ZIO_FLAG_SCAN_THREAD) && in zio_done()
3148 zio->io_error == ENXIO && in zio_done()
3151 zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; in zio_done()
3153 if (!(zio->io_flags & ZIO_FLAG_CANFAIL) && !zio->io_reexecute) in zio_done()
3154 zio->io_reexecute |= ZIO_REEXECUTE_SUSPEND; in zio_done()
3171 zio_inherit_child_errors(zio, ZIO_CHILD_LOGICAL); in zio_done()
3173 if ((zio->io_error || zio->io_reexecute) && in zio_done()
3174 IO_IS_ALLOCATING(zio) && zio->io_gang_leader == zio && in zio_done()
3175 !(zio->io_flags & (ZIO_FLAG_IO_REWRITE | ZIO_FLAG_NOPWRITE))) in zio_done()
3176 zio_dva_unallocate(zio, zio->io_gang_tree, bp); in zio_done()
3178 zio_gang_tree_free(&zio->io_gang_tree); in zio_done()
3183 if ((zio->io_flags & ZIO_FLAG_GODFATHER) && in zio_done()
3184 (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) in zio_done()
3185 zio->io_reexecute = 0; in zio_done()
3187 if (zio->io_reexecute) { in zio_done()
3201 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL); in zio_done()
3203 zio->io_gang_leader = NULL; in zio_done()
3205 mutex_enter(&zio->io_lock); in zio_done()
3206 zio->io_state[ZIO_WAIT_DONE] = 1; in zio_done()
3207 mutex_exit(&zio->io_lock); in zio_done()
3216 for (pio = zio_walk_parents(zio); pio != NULL; pio = pio_next) { in zio_done()
3217 zio_link_t *zl = zio->io_walk_link; in zio_done()
3218 pio_next = zio_walk_parents(zio); in zio_done()
3221 (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND)) { in zio_done()
3222 zio_remove_child(pio, zio, zl); in zio_done()
3223 zio_notify_parent(pio, zio, ZIO_WAIT_DONE); in zio_done()
3227 if ((pio = zio_unique_parent(zio)) != NULL) { in zio_done()
3233 ASSERT(!(zio->io_flags & ZIO_FLAG_GODFATHER)); in zio_done()
3234 zio->io_flags |= ZIO_FLAG_DONT_PROPAGATE; in zio_done()
3235 zio_notify_parent(pio, zio, ZIO_WAIT_DONE); in zio_done()
3236 } else if (zio->io_reexecute & ZIO_REEXECUTE_SUSPEND) { in zio_done()
3241 zio_suspend(spa, zio); in zio_done()
3247 ASSERT(zio->io_tqent.tqent_next == NULL); in zio_done()
3249 ZIO_TASKQ_ISSUE, (task_func_t *)zio_reexecute, zio, in zio_done()
3250 0, &zio->io_tqent); in zio_done()
3255 ASSERT(zio->io_child_count == 0); in zio_done()
3256 ASSERT(zio->io_reexecute == 0); in zio_done()
3257 ASSERT(zio->io_error == 0 || (zio->io_flags & ZIO_FLAG_CANFAIL)); in zio_done()
3262 while (zio->io_cksum_report != NULL) { in zio_done()
3263 zio_cksum_report_t *zcr = zio->io_cksum_report; in zio_done()
3264 zio->io_cksum_report = zcr->zcr_next; in zio_done()
3275 if (zio->io_done) in zio_done()
3276 zio->io_done(zio); in zio_done()
3278 mutex_enter(&zio->io_lock); in zio_done()
3279 zio->io_state[ZIO_WAIT_DONE] = 1; in zio_done()
3280 mutex_exit(&zio->io_lock); in zio_done()
3282 for (pio = zio_walk_parents(zio); pio != NULL; pio = pio_next) { in zio_done()
3283 zio_link_t *zl = zio->io_walk_link; in zio_done()
3284 pio_next = zio_walk_parents(zio); in zio_done()
3285 zio_remove_child(pio, zio, zl); in zio_done()
3286 zio_notify_parent(pio, zio, ZIO_WAIT_DONE); in zio_done()
3289 if (zio->io_waiter != NULL) { in zio_done()
3290 mutex_enter(&zio->io_lock); in zio_done()
3291 zio->io_executor = NULL; in zio_done()
3292 cv_broadcast(&zio->io_cv); in zio_done()
3293 mutex_exit(&zio->io_lock); in zio_done()
3295 zio_destroy(zio); in zio_done()