Lines Matching refs:pio
602 zio_walk_children(zio_t *pio, zio_link_t **zl) in zio_walk_children() argument
604 list_t *cl = &pio->io_child_list; in zio_walk_children()
606 ASSERT(MUTEX_HELD(&pio->io_lock)); in zio_walk_children()
612 ASSERT((*zl)->zl_parent == pio); in zio_walk_children()
620 zio_t *pio = zio_walk_parents(cio, &zl); in zio_unique_parent() local
623 return (pio); in zio_unique_parent()
627 zio_add_child(zio_t *pio, zio_t *cio) in zio_add_child() argument
637 ASSERT3S(cio->io_child_type, <=, pio->io_child_type); in zio_add_child()
639 zl->zl_parent = pio; in zio_add_child()
642 mutex_enter(&pio->io_lock); in zio_add_child()
645 ASSERT(pio->io_state[ZIO_WAIT_DONE] == 0); in zio_add_child()
648 pio->io_children[cio->io_child_type][w] += !cio->io_state[w]; in zio_add_child()
650 list_insert_head(&pio->io_child_list, zl); in zio_add_child()
653 pio->io_child_count++; in zio_add_child()
657 mutex_exit(&pio->io_lock); in zio_add_child()
661 zio_remove_child(zio_t *pio, zio_t *cio, zio_link_t *zl) in zio_remove_child() argument
663 ASSERT(zl->zl_parent == pio); in zio_remove_child()
666 mutex_enter(&pio->io_lock); in zio_remove_child()
669 list_remove(&pio->io_child_list, zl); in zio_remove_child()
672 pio->io_child_count--; in zio_remove_child()
676 mutex_exit(&pio->io_lock); in zio_remove_child()
706 zio_notify_parent(zio_t *pio, zio_t *zio, enum zio_wait_type wait, in zio_notify_parent() argument
709 uint64_t *countp = &pio->io_children[zio->io_child_type][wait]; in zio_notify_parent()
710 int *errorp = &pio->io_child_error[zio->io_child_type]; in zio_notify_parent()
712 mutex_enter(&pio->io_lock); in zio_notify_parent()
715 pio->io_reexecute |= zio->io_reexecute; in zio_notify_parent()
720 if (*countp == 0 && pio->io_stall == countp) { in zio_notify_parent()
722 pio->io_stage < ZIO_STAGE_VDEV_IO_START ? ZIO_TASKQ_ISSUE : in zio_notify_parent()
724 pio->io_stall = NULL; in zio_notify_parent()
725 mutex_exit(&pio->io_lock); in zio_notify_parent()
749 *next_to_executep = pio; in zio_notify_parent()
751 zio_taskq_dispatch(pio, type, B_FALSE); in zio_notify_parent()
754 mutex_exit(&pio->io_lock); in zio_notify_parent()
805 zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, in zio_create() argument
880 if (pio != NULL) { in zio_create()
881 zio->io_metaslab_class = pio->io_metaslab_class; in zio_create()
883 zio->io_logical = pio->io_logical; in zio_create()
885 zio->io_gang_leader = pio->io_gang_leader; in zio_create()
886 zio_add_child(pio, zio); in zio_create()
906 zio_null(zio_t *pio, spa_t *spa, vdev_t *vd, zio_done_func_t *done, in zio_null() argument
911 zio = zio_create(pio, spa, 0, NULL, NULL, 0, 0, done, private, in zio_null()
1105 zio_read(zio_t *pio, spa_t *spa, const blkptr_t *bp, in zio_read() argument
1111 zio = zio_create(pio, spa, BP_PHYSICAL_BIRTH(bp), bp, in zio_read()
1121 zio_write(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, in zio_write() argument
1139 zio = zio_create(pio, spa, txg, bp, data, lsize, psize, done, private, in zio_write()
1166 zio_rewrite(zio_t *pio, spa_t *spa, uint64_t txg, blkptr_t *bp, abd_t *data, in zio_rewrite() argument
1172 zio = zio_create(pio, spa, txg, bp, data, size, size, done, private, in zio_rewrite()
1240 zio_free_sync(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, in zio_free_sync() argument
1262 return (zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), in zio_free_sync()
1273 zio_claim(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp, in zio_claim() argument
1282 return (zio_null(pio, spa, NULL, NULL, NULL, 0)); in zio_claim()
1301 zio = zio_create(pio, spa, txg, bp, NULL, BP_GET_PSIZE(bp), in zio_claim()
1310 zio_ioctl(zio_t *pio, spa_t *spa, vdev_t *vd, int cmd, in zio_ioctl() argument
1317 zio = zio_create(pio, spa, 0, NULL, NULL, 0, 0, done, private, in zio_ioctl()
1323 zio = zio_null(pio, spa, NULL, NULL, NULL, flags); in zio_ioctl()
1334 zio_trim(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, in zio_trim() argument
1345 zio = zio_create(pio, vd->vdev_spa, 0, NULL, NULL, size, size, done, in zio_trim()
1354 zio_read_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, in zio_read_phys() argument
1365 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, size, done, in zio_read_phys()
1375 zio_write_phys(zio_t *pio, vdev_t *vd, uint64_t offset, uint64_t size, in zio_write_phys() argument
1386 zio = zio_create(pio, vd->vdev_spa, 0, NULL, data, size, size, done, in zio_write_phys()
1412 zio_vdev_child_io(zio_t *pio, blkptr_t *bp, vdev_t *vd, uint64_t offset, in zio_vdev_child_io() argument
1437 pio->io_pipeline &= ~ZIO_STAGE_CHECKSUM_VERIFY; in zio_vdev_child_io()
1445 flags |= ZIO_VDEV_CHILD_FLAGS(pio); in zio_vdev_child_io()
1462 ASSERT(pio->io_metaslab_class != NULL); in zio_vdev_child_io()
1463 ASSERT(pio->io_metaslab_class->mc_alloc_throttle_enabled); in zio_vdev_child_io()
1467 ASSERT(!(pio->io_flags & ZIO_FLAG_IO_REWRITE) || in zio_vdev_child_io()
1468 pio->io_child_type == ZIO_CHILD_GANG); in zio_vdev_child_io()
1474 zio = zio_create(pio, pio->io_spa, pio->io_txg, bp, data, size, size, in zio_vdev_child_io()
1475 done, private, type, priority, flags, vd, offset, &pio->io_bookmark, in zio_vdev_child_io()
1479 zio->io_physdone = pio->io_physdone; in zio_vdev_child_io()
2022 zio_deadman_impl(zio_t *pio, int ziodepth) in zio_deadman_impl() argument
2026 vdev_t *vd = pio->io_vd; in zio_deadman_impl()
2030 zbookmark_phys_t *zb = &pio->io_bookmark; in zio_deadman_impl()
2031 uint64_t delta = gethrtime() - pio->io_timestamp; in zio_deadman_impl()
2032 uint64_t failmode = spa_get_deadman_failmode(pio->io_spa); in zio_deadman_impl()
2044 ziodepth, pio, pio->io_timestamp, in zio_deadman_impl()
2045 (u_longlong_t)delta, pio->io_delta, pio->io_delay, in zio_deadman_impl()
2047 vq ? vq->vq_io_complete_ts : 0, pio->io_type, in zio_deadman_impl()
2048 pio->io_priority, pio->io_flags, pio->io_stage, in zio_deadman_impl()
2049 pio->io_pipeline, pio->io_pipeline_trace, in zio_deadman_impl()
2052 (u_longlong_t)pio->io_offset, (u_longlong_t)pio->io_size, in zio_deadman_impl()
2053 pio->io_error); in zio_deadman_impl()
2055 pio->io_spa, vd, zb, pio, 0); in zio_deadman_impl()
2058 taskq_empty_ent(&pio->io_tqent)) { in zio_deadman_impl()
2059 zio_interrupt(pio); in zio_deadman_impl()
2063 mutex_enter(&pio->io_lock); in zio_deadman_impl()
2064 for (cio = zio_walk_children(pio, &zl); cio != NULL; cio = cio_next) { in zio_deadman_impl()
2065 cio_next = zio_walk_children(pio, &zl); in zio_deadman_impl()
2068 mutex_exit(&pio->io_lock); in zio_deadman_impl()
2076 zio_deadman(zio_t *pio, char *tag) in zio_deadman() argument
2078 spa_t *spa = pio->io_spa; in zio_deadman()
2084 zio_deadman_impl(pio, 0); in zio_deadman()
2291 zio_t *pio; in zio_nowait() local
2299 pio = spa->spa_async_zio_root[CPU_SEQID_UNSTABLE]; in zio_nowait()
2301 zio_add_child(pio, zio); in zio_nowait()
2318 zio_t *pio = arg; in zio_reexecute() local
2321 ASSERT(pio->io_child_type == ZIO_CHILD_LOGICAL); in zio_reexecute()
2322 ASSERT(pio->io_orig_stage == ZIO_STAGE_OPEN); in zio_reexecute()
2323 ASSERT(pio->io_gang_leader == NULL); in zio_reexecute()
2324 ASSERT(pio->io_gang_tree == NULL); in zio_reexecute()
2326 pio->io_flags = pio->io_orig_flags; in zio_reexecute()
2327 pio->io_stage = pio->io_orig_stage; in zio_reexecute()
2328 pio->io_pipeline = pio->io_orig_pipeline; in zio_reexecute()
2329 pio->io_reexecute = 0; in zio_reexecute()
2330 pio->io_flags |= ZIO_FLAG_REEXECUTED; in zio_reexecute()
2331 pio->io_pipeline_trace = 0; in zio_reexecute()
2332 pio->io_error = 0; in zio_reexecute()
2334 pio->io_state[w] = 0; in zio_reexecute()
2336 pio->io_child_error[c] = 0; in zio_reexecute()
2338 if (IO_IS_ALLOCATING(pio)) in zio_reexecute()
2339 BP_ZERO(pio->io_bp); in zio_reexecute()
2349 mutex_enter(&pio->io_lock); in zio_reexecute()
2350 for (cio = zio_walk_children(pio, &zl); cio != NULL; cio = cio_next) { in zio_reexecute()
2351 cio_next = zio_walk_children(pio, &zl); in zio_reexecute()
2353 pio->io_children[cio->io_child_type][w]++; in zio_reexecute()
2354 mutex_exit(&pio->io_lock); in zio_reexecute()
2356 mutex_enter(&pio->io_lock); in zio_reexecute()
2358 mutex_exit(&pio->io_lock); in zio_reexecute()
2365 if (!(pio->io_flags & ZIO_FLAG_GODFATHER)) { in zio_reexecute()
2366 pio->io_queued_timestamp = gethrtime(); in zio_reexecute()
2367 __zio_execute(pio); in zio_reexecute()
2409 zio_t *pio; in zio_resume() local
2417 pio = spa->spa_suspend_zio_root; in zio_resume()
2421 if (pio == NULL) in zio_resume()
2424 zio_reexecute(pio); in zio_resume()
2425 return (zio_wait(pio)); in zio_resume()
2510 zio_read_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, in zio_read_gang() argument
2514 return (pio); in zio_read_gang()
2516 return (zio_read(pio, pio->io_spa, bp, abd_get_offset(data, offset), in zio_read_gang()
2518 NULL, pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio), in zio_read_gang()
2519 &pio->io_bookmark)); in zio_read_gang()
2523 zio_rewrite_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, in zio_rewrite_gang() argument
2531 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, in zio_rewrite_gang()
2533 pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio), in zio_rewrite_gang()
2534 &pio->io_bookmark); in zio_rewrite_gang()
2544 if (gn != pio->io_gang_leader->io_gang_tree) { in zio_rewrite_gang()
2556 if (pio->io_gang_leader->io_flags & ZIO_FLAG_INDUCE_DAMAGE) in zio_rewrite_gang()
2559 zio = zio_rewrite(pio, pio->io_spa, pio->io_txg, bp, in zio_rewrite_gang()
2561 zio_gang_issue_func_done, NULL, pio->io_priority, in zio_rewrite_gang()
2562 ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark); in zio_rewrite_gang()
2569 zio_free_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, in zio_free_gang() argument
2574 zio_t *zio = zio_free_sync(pio, pio->io_spa, pio->io_txg, bp, in zio_free_gang()
2575 ZIO_GANG_CHILD_FLAGS(pio)); in zio_free_gang()
2577 zio = zio_null(pio, pio->io_spa, in zio_free_gang()
2578 NULL, NULL, NULL, ZIO_GANG_CHILD_FLAGS(pio)); in zio_free_gang()
2584 zio_claim_gang(zio_t *pio, blkptr_t *bp, zio_gang_node_t *gn, abd_t *data, in zio_claim_gang() argument
2588 return (zio_claim(pio, pio->io_spa, pio->io_txg, bp, in zio_claim_gang()
2589 NULL, NULL, ZIO_GANG_CHILD_FLAGS(pio))); in zio_claim_gang()
2690 zio_gang_tree_issue(zio_t *pio, zio_gang_node_t *gn, blkptr_t *bp, abd_t *data, in zio_gang_tree_issue() argument
2693 zio_t *gio = pio->io_gang_leader; in zio_gang_tree_issue()
2704 zio = zio_gang_issue_func[gio->io_type](pio, bp, gn, data, offset); in zio_gang_tree_issue()
2722 if (zio != pio) in zio_gang_tree_issue()
2767 zio_t *pio = zio_unique_parent(zio); in zio_write_gang_member_ready() local
2769 dva_t *pdva = pio->io_bp->blk_dva; in zio_write_gang_member_ready()
2781 ASSERT3U(pio->io_prop.zp_copies, <=, BP_GET_NDVAS(pio->io_bp)); in zio_write_gang_member_ready()
2782 ASSERT3U(BP_GET_NDVAS(zio->io_bp), <=, BP_GET_NDVAS(pio->io_bp)); in zio_write_gang_member_ready()
2784 mutex_enter(&pio->io_lock); in zio_write_gang_member_ready()
2791 mutex_exit(&pio->io_lock); in zio_write_gang_member_ready()
2807 zio_write_gang_block(zio_t *pio, metaslab_class_t *mc) in zio_write_gang_block() argument
2809 spa_t *spa = pio->io_spa; in zio_write_gang_block()
2810 blkptr_t *bp = pio->io_bp; in zio_write_gang_block()
2811 zio_t *gio = pio->io_gang_leader; in zio_write_gang_block()
2816 uint64_t txg = pio->io_txg; in zio_write_gang_block()
2817 uint64_t resid = pio->io_size; in zio_write_gang_block()
2823 boolean_t has_data = !(pio->io_flags & ZIO_FLAG_NODATA); in zio_write_gang_block()
2834 if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) { in zio_write_gang_block()
2835 ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); in zio_write_gang_block()
2839 VERIFY(zfs_refcount_held(&mc->mc_allocator[pio->io_allocator]. in zio_write_gang_block()
2840 mca_alloc_slots, pio)); in zio_write_gang_block()
2851 pio->io_allocator, pio, flags)); in zio_write_gang_block()
2855 bp, gbh_copies, txg, pio == gio ? NULL : gio->io_bp, flags, in zio_write_gang_block()
2856 &pio->io_alloc_list, pio, pio->io_allocator); in zio_write_gang_block()
2858 if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) { in zio_write_gang_block()
2859 ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); in zio_write_gang_block()
2870 gbh_copies - copies, pio->io_allocator, pio); in zio_write_gang_block()
2873 pio->io_error = error; in zio_write_gang_block()
2874 return (pio); in zio_write_gang_block()
2877 if (pio == gio) { in zio_write_gang_block()
2880 gnpp = pio->io_private; in zio_write_gang_block()
2881 ASSERT(pio->io_ready == zio_write_gang_member_ready); in zio_write_gang_block()
2892 zio = zio_rewrite(pio, spa, txg, bp, gbh_abd, SPA_GANGBLOCKSIZE, in zio_write_gang_block()
2893 zio_write_gang_done, NULL, pio->io_priority, in zio_write_gang_block()
2894 ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark); in zio_write_gang_block()
2920 has_data ? abd_get_offset(pio->io_abd, pio->io_size - in zio_write_gang_block()
2923 zio_write_gang_done, &gn->gn_child[g], pio->io_priority, in zio_write_gang_block()
2924 ZIO_GANG_CHILD_FLAGS(pio), &pio->io_bookmark); in zio_write_gang_block()
2926 if (pio->io_flags & ZIO_FLAG_IO_ALLOCATING) { in zio_write_gang_block()
2927 ASSERT(pio->io_priority == ZIO_PRIORITY_ASYNC_WRITE); in zio_write_gang_block()
2944 pio->io_pipeline = ZIO_INTERLOCK_PIPELINE; in zio_write_gang_block()
2949 pio->io_flags &= ~ZIO_FLAG_FASTWRITE; in zio_write_gang_block()
2953 return (pio); in zio_write_gang_block()
3050 zio_t *pio = zio_unique_parent(zio); in zio_ddt_child_read_done() local
3052 mutex_enter(&pio->io_lock); in zio_ddt_child_read_done()
3061 mutex_exit(&pio->io_lock); in zio_ddt_child_read_done()
3250 zio_t *pio; in zio_ddt_child_write_ready() local
3262 while ((pio = zio_walk_parents(zio, &zl)) != NULL) in zio_ddt_child_write_ready()
3263 ddt_bp_fill(ddp, pio->io_bp, zio->io_txg); in zio_ddt_child_write_ready()
3945 zio_change_priority(zio_t *pio, zio_priority_t priority) in zio_change_priority() argument
3952 if (pio->io_vd != NULL && pio->io_vd->vdev_ops->vdev_op_leaf) { in zio_change_priority()
3953 vdev_queue_change_io_priority(pio, priority); in zio_change_priority()
3955 pio->io_priority = priority; in zio_change_priority()
3958 mutex_enter(&pio->io_lock); in zio_change_priority()
3959 for (cio = zio_walk_children(pio, &zl); cio != NULL; cio = cio_next) { in zio_change_priority()
3960 cio_next = zio_walk_children(pio, &zl); in zio_change_priority()
3963 mutex_exit(&pio->io_lock); in zio_change_priority()
4374 zio_t *pio, *pio_next; in zio_ready() local
4415 pio = zio_walk_parents(zio, &zl); in zio_ready()
4425 for (; pio != NULL; pio = pio_next) { in zio_ready()
4427 zio_notify_parent(pio, zio, ZIO_WAIT_READY, NULL); in zio_ready()
4453 zio_t *pio = zio_unique_parent(zio); in zio_dva_throttle_done() local
4476 if (pio->io_child_type == ZIO_CHILD_GANG) { in zio_dva_throttle_done()
4481 if (pio->io_flags & ZIO_FLAG_IO_REWRITE) in zio_dva_throttle_done()
4482 pio = zio_unique_parent(pio); in zio_dva_throttle_done()
4486 ASSERT(IO_IS_ALLOCATING(pio)); in zio_dva_throttle_done()
4493 mutex_enter(&pio->io_lock); in zio_dva_throttle_done()
4494 metaslab_group_alloc_decrement(zio->io_spa, vd->vdev_id, pio, flags, in zio_dva_throttle_done()
4495 pio->io_allocator, B_TRUE); in zio_dva_throttle_done()
4496 mutex_exit(&pio->io_lock); in zio_dva_throttle_done()
4499 pio->io_allocator, pio); in zio_dva_throttle_done()
4506 zio_allocate_dispatch(zio->io_spa, pio->io_allocator); in zio_dva_throttle_done()
4517 zio_t *pio, *pio_next; in zio_done() local
4769 for (pio = zio_walk_parents(zio, &zl); pio != NULL; in zio_done()
4770 pio = pio_next) { in zio_done()
4774 if ((pio->io_flags & ZIO_FLAG_GODFATHER) && in zio_done()
4776 zio_remove_child(pio, zio, remove_zl); in zio_done()
4781 zio_notify_parent(pio, zio, ZIO_WAIT_DONE, in zio_done()
4786 if ((pio = zio_unique_parent(zio)) != NULL) { in zio_done()
4798 zio_notify_parent(pio, zio, ZIO_WAIT_DONE, NULL); in zio_done()
4857 for (pio = zio_walk_parents(zio, &zl); pio != NULL; pio = pio_next) { in zio_done()
4860 zio_remove_child(pio, zio, remove_zl); in zio_done()
4861 zio_notify_parent(pio, zio, ZIO_WAIT_DONE, &next_to_execute); in zio_done()