Lines Matching defs:pio

355 zio_walk_children(zio_t *pio, zio_link_t **zl)
357 list_t *cl = &pio->io_child_list;
363 ASSERT((*zl)->zl_parent == pio);
371 zio_t *pio = zio_walk_parents(cio, &zl);
374 return (pio);
378 zio_add_child(zio_t *pio, zio_t *cio)
388 ASSERT(cio->io_child_type <= pio->io_child_type);
390 zl->zl_parent = pio;
394 mutex_enter(&pio->io_lock);
396 ASSERT(pio->io_state[ZIO_WAIT_DONE] == 0);
399 pio->io_children[cio->io_child_type][w] += !cio->io_state[w];
401 list_insert_head(&pio->io_child_list, zl);
404 pio->io_child_count++;
407 mutex_exit(&pio->io_lock);
412 zio_remove_child(zio_t *pio, zio_t *cio, zio_link_t *zl)
414 ASSERT(zl->zl_parent == pio);
418 mutex_enter(&pio->io_lock);
420 list_remove(&pio->io_child_list, zl);
423 pio->io_child_count--;
426 mutex_exit(&pio->io_lock);
452 zio_notify_parent(zio_t *pio, zio_t *zio, enum zio_wait_type wait)
454 uint64_t *countp = &pio->io_children[zio->io_child_type][wait];
455 int *errorp = &pio->io_child_error[zio->io_child_type];
457 mutex_enter(&pio->io_lock);
460 pio->io_reexecute |= zio->io_reexecute;
465 if (*countp == 0 && pio->io_stall == countp) {
467 pio->io_stage < ZIO_STAGE_VDEV_IO_START ? ZIO_TASKQ_ISSUE :
469 pio->io_stall = NULL;
470 mutex_exit(&pio->io_lock);
477 zio_taskq_dispatch(pio, type, B_FALSE);
479 mutex_exit(&pio->io_lock);
520 zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
594 if (pio != NULL) {
596 zio->io_logical = pio->io_logical;
598 zio->io_gang_leader = pio->io_gang_leader;
599 zio_add_child(pio, zio);
617 zio_null(zio_t *pio, spa_t *spa, vdev_t *vd, zio_done_func_t *done,
622 zio = zio_create(pio, spa, 0, NULL, NULL, 0, 0, done, private,
718 zio_read(zio_t *pio, spa_t *spa, const blkptr_t *bp,
726 zio = zio_create(pio, spa, BP_PHYSICAL_BIRTH(bp), bp,
736 zio_write(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp,
754 zio = zio_create(pio, spa, txg, bp, data, lsize, psize, done, private,
778 zio_rewrite(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, void *data,
784 zio = zio_create(pio, spa, txg, bp, data, size, size, done, private,
839 zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
850 return (zio_null(pio, spa, NULL, NULL, NULL, 0));
863 zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp),
871 zio_claim(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
879 return (zio_null(pio, spa, NULL, NULL, NULL, 0));
897 zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp),
906 zio_ioctl(zio_t *pio, spa_t *spa, vdev_t *vd, int cmd,
913 zio = zio_create(pio, spa, 0, NULL, NULL, 0, 0, done, private,
919 zio = zio_null(pio, spa, NULL, NULL, NULL, flags);
930 zio_read_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size,
941 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, size, done,
951 zio_write_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size,
962 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, size, done,
987 zio_vdev_child_io(zio_t *pio, blkptr_t *bp, vdev_t *vd, uint64_t offset,
995 (pio->io_vd ? pio->io_vd : pio->io_spa->spa_root_vdev));
1005 pio->io_pipeline &= ~ZIO_STAGE_CHECKSUM_VERIFY;
1011 flags |= ZIO_VDEV_CHILD_FLAGS(pio) | ZIO_FLAG_DONT_PROPAGATE;
1028 metaslab_class_t *mc = spa_normal_class(pio->io_spa);
1034 ASSERT(!(pio->io_flags & ZIO_FLAG_IO_REWRITE) ||
1035 pio->io_child_type == ZIO_CHILD_GANG);
1040 zio = zio_create(pio, pio->io_spa, pio->io_txg, bp, data, size, size,
1041 done, private, type, priority, flags, vd, offset, &pio->io_bookmark,
1045 zio->io_physdone = pio->io_physdone;
1638 zio_reexecute(zio_t *pio)
1642 ASSERT(pio->io_child_type == ZIO_CHILD_LOGICAL);
1643 ASSERT(pio->io_orig_stage == ZIO_STAGE_OPEN);
1644 ASSERT(pio->io_gang_leader == NULL);
1645 ASSERT(pio->io_gang_tree == NULL);
1647 pio->io_flags = pio->io_orig_flags;
1648 pio->io_stage = pio->io_orig_stage;
1649 pio->io_pipeline = pio->io_orig_pipeline;
1650 pio->io_reexecute = 0;
1651 pio->io_flags |= ZIO_FLAG_REEXECUTED;
1652 pio->io_pipeline_trace = 0;
1653 pio->io_error = 0;
1655 pio->io_state[w] = 0;
1657 pio->io_child_error[c] = 0;
1659 if (IO_IS_ALLOCATING(pio))
1660 BP_ZERO(pio->io_bp);
1663 * As we reexecute pio's children, new children could be created.
1664 * New children go to the head of pio's io_child_list, however,
1666 * the remainder of pio's io_child_list, from 'cio_next' onward,
1670 for (cio = zio_walk_children(pio, &zl); cio != NULL; cio = cio_next) {
1671 cio_next = zio_walk_children(pio, &zl);
1672 mutex_enter(&pio->io_lock);
1674 pio->io_children[cio->io_child_type][w]++;
1675 mutex_exit(&pio->io_lock);
1684 if (!(pio->io_flags & ZIO_FLAG_GODFATHER)) {
1685 pio->io_queued_timestamp = gethrtime();
1686 zio_execute(pio);
1724 zio_t *pio;
1732 pio = spa->spa_suspend_zio_root;
1736 if (pio == NULL)
1739 zio_reexecute(pio);
1740 return (zio_wait(pio));
1819 zio_read_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, void *data)
1822 return (pio);
1824 return (zio_read(pio, pio->io_spa, bp, data, BP_GET_PSIZE(bp),
1825 NULL, NULL, pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio),
1826 &pio->io_bookmark));
1830 zio_rewrite_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, void *data)
1835 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp,
1836 gn->gn_gbh, SPA_GANGBLOCKSIZE, NULL, NULL, pio->io_priority,
1837 ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark);
1847 if (gn != pio->io_gang_leader->io_gang_tree) {
1855 if (pio->io_gang_leader->io_flags & ZIO_FLAG_INDUCE_DAMAGE)
1858 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp,
1859 data, BP_GET_PSIZE(bp), NULL, NULL, pio->io_priority,
1860 ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark);
1868 zio_free_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, void *data)
1870 return (zio_free_sync(pio, pio->io_spa, pio->io_txg, bp,
1871 ZIO_GANG_CHILD_FLAGS(pio)));
1876 zio_claim_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, void *data)
1878 return (zio_claim(pio, pio->io_spa, pio->io_txg, bp,
1879 NULL, NULL, ZIO_GANG_CHILD_FLAGS(pio)));
1976 zio_gang_tree_issue(zio_t *pio, zio_gang_node_t *gn, blkptr_t *bp, void *data)
1978 zio_t *gio = pio->io_gang_leader;
1989 zio = zio_gang_issue_func[gio->io_type](pio, bp, gn, data);
2006 if (zio != pio)
2049 zio_t *pio = zio_unique_parent(zio);
2052 dva_t *pdva = pio->io_bp->blk_dva;
2063 ASSERT3U(pio->io_prop.zp_copies, <=, BP_GET_NDVAS(pio->io_bp));
2064 ASSERT3U(BP_GET_NDVAS(zio->io_bp), <=, BP_GET_NDVAS(pio->io_bp));
2066 mutex_enter(&pio->io_lock);
2073 mutex_exit(&pio->io_lock);
2077 zio_write_gang_block(zio_t *pio)
2079 spa_t *spa = pio->io_spa;
2081 blkptr_t *bp = pio->io_bp;
2082 zio_t *gio = pio->io_gang_leader;
2086 uint64_t txg = pio->io_txg;
2087 uint64_t resid = pio->io_size;
2095 if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) {
2096 ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE);
2097 ASSERT(!(pio->io_flags & ZIO_FLAG_NODATA));
2100 VERIFY(refcount_held(&mc->mc_alloc_slots, pio));
2111 pio, flags));
2115 bp, gbh_copies, txg, pio == gio ? NULL : gio->io_bp, flags,
2116 &pio->io_alloc_list, pio);
2118 if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) {
2119 ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE);
2120 ASSERT(!(pio->io_flags & ZIO_FLAG_NODATA));
2130 gbh_copies - copies, pio);
2132 pio->io_error = error;
2136 if (pio == gio) {
2139 gnpp = pio->io_private;
2140 ASSERT(pio->io_ready == zio_write_gang_member_ready);
2150 zio = zio_rewrite(pio, spa, txg, bp, gbh, SPA_GANGBLOCKSIZE, NULL, NULL,
2151 pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark);
2171 (char *)pio->io_data + (pio->io_size - resid), lsize, lsize,
2173 &gn->gn_child[g], pio->io_priority,
2174 ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark);
2176 if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) {
2177 ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE);
2178 ASSERT(!(pio->io_flags & ZIO_FLAG_NODATA));
2192 * Set pio's pipeline to just wait for zio to finish.
2194 pio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
2280 zio_t *pio = zio_unique_parent(zio);
2282 mutex_enter(&pio->io_lock);
2290 mutex_exit(&pio->io_lock);
2456 zio_t *pio;
2468 while ((pio = zio_walk_parents(zio, &zl)) != NULL)
2469 ddt_bp_fill(ddp, pio->io_bp, zio->io_txg);
3327 zio_t *pio, *pio_next;
3365 pio = zio_walk_parents(zio, &zl);
3375 for (; pio != NULL; pio = pio_next) {
3377 zio_notify_parent(pio, zio, ZIO_WAIT_READY);
3403 zio_t *pio = zio_unique_parent(zio);
3425 if (pio->io_child_type == ZIO_CHILD_GANG) {
3430 if (pio->io_flags & ZIO_FLAG_IO_REWRITE)
3431 pio = zio_unique_parent(pio);
3435 ASSERT(IO_IS_ALLOCATING(pio));
3441 mutex_enter(&pio->io_lock);
3442 metaslab_group_alloc_decrement(zio->io_spa, vd->vdev_id, pio, flags);
3443 mutex_exit(&pio->io_lock);
3446 1, pio);
3464 zio_t *pio, *pio_next;
3672 for (pio = zio_walk_parents(zio, &zl); pio != NULL;
3673 pio = pio_next) {
3677 if ((pio->io_flags & ZIO_FLAG_GODFATHER) &&
3679 zio_remove_child(pio, zio, remove_zl);
3680 zio_notify_parent(pio, zio, ZIO_WAIT_DONE);
3684 if ((pio = zio_unique_parent(zio)) != NULL) {
3692 zio_notify_parent(pio, zio, ZIO_WAIT_DONE);
3740 for (pio = zio_walk_parents(zio, &zl); pio != NULL; pio = pio_next) {
3743 zio_remove_child(pio, zio, remove_zl);
3744 zio_notify_parent(pio, zio, ZIO_WAIT_DONE);