Deleted Added
full compact
zio.c (243503) zio.c (243524)
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 695 unchanged lines hidden (view full) ---

704
705 ASSERT(zp->zp_checksum >= ZIO_CHECKSUM_OFF &&
706 zp->zp_checksum < ZIO_CHECKSUM_FUNCTIONS &&
707 zp->zp_compress >= ZIO_COMPRESS_OFF &&
708 zp->zp_compress < ZIO_COMPRESS_FUNCTIONS &&
709 DMU_OT_IS_VALID(zp->zp_type) &&
710 zp->zp_level < 32 &&
711 zp->zp_copies > 0 &&
1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE

--- 695 unchanged lines hidden (view full) ---

704
705 ASSERT(zp->zp_checksum >= ZIO_CHECKSUM_OFF &&
706 zp->zp_checksum < ZIO_CHECKSUM_FUNCTIONS &&
707 zp->zp_compress >= ZIO_COMPRESS_OFF &&
708 zp->zp_compress < ZIO_COMPRESS_FUNCTIONS &&
709 DMU_OT_IS_VALID(zp->zp_type) &&
710 zp->zp_level < 32 &&
711 zp->zp_copies > 0 &&
712 zp->zp_copies <= spa_max_replication(spa) &&
713 zp->zp_dedup <= 1 &&
714 zp->zp_dedup_verify <= 1);
712 zp->zp_copies <= spa_max_replication(spa));
715
716 zio = zio_create(pio, spa, txg, bp, data, size, done, private,
717 ZIO_TYPE_WRITE, priority, flags, NULL, 0, zb,
718 ZIO_STAGE_OPEN, (flags & ZIO_FLAG_DDT_CHILD) ?
719 ZIO_DDT_CHILD_WRITE_PIPELINE : ZIO_WRITE_PIPELINE);
720
721 zio->io_ready = ready;
722 zio->io_prop = *zp;

--- 11 unchanged lines hidden (view full) ---

734 zio = zio_create(pio, spa, txg, bp, data, size, done, private,
735 ZIO_TYPE_WRITE, priority, flags, NULL, 0, zb,
736 ZIO_STAGE_OPEN, ZIO_REWRITE_PIPELINE);
737
738 return (zio);
739}
740
741void
713
714 zio = zio_create(pio, spa, txg, bp, data, size, done, private,
715 ZIO_TYPE_WRITE, priority, flags, NULL, 0, zb,
716 ZIO_STAGE_OPEN, (flags & ZIO_FLAG_DDT_CHILD) ?
717 ZIO_DDT_CHILD_WRITE_PIPELINE : ZIO_WRITE_PIPELINE);
718
719 zio->io_ready = ready;
720 zio->io_prop = *zp;

--- 11 unchanged lines hidden (view full) ---

732 zio = zio_create(pio, spa, txg, bp, data, size, done, private,
733 ZIO_TYPE_WRITE, priority, flags, NULL, 0, zb,
734 ZIO_STAGE_OPEN, ZIO_REWRITE_PIPELINE);
735
736 return (zio);
737}
738
739void
742zio_write_override(zio_t *zio, blkptr_t *bp, int copies)
740zio_write_override(zio_t *zio, blkptr_t *bp, int copies, boolean_t nopwrite)
743{
744 ASSERT(zio->io_type == ZIO_TYPE_WRITE);
745 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL);
746 ASSERT(zio->io_stage == ZIO_STAGE_OPEN);
747 ASSERT(zio->io_txg == spa_syncing_txg(zio->io_spa));
748
741{
742 ASSERT(zio->io_type == ZIO_TYPE_WRITE);
743 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL);
744 ASSERT(zio->io_stage == ZIO_STAGE_OPEN);
745 ASSERT(zio->io_txg == spa_syncing_txg(zio->io_spa));
746
747 /*
748 * We must reset the io_prop to match the values that existed
749 * when the bp was first written by dmu_sync() keeping in mind
750 * that nopwrite and dedup are mutually exclusive.
751 */
752 zio->io_prop.zp_dedup = nopwrite ? B_FALSE : zio->io_prop.zp_dedup;
753 zio->io_prop.zp_nopwrite = nopwrite;
749 zio->io_prop.zp_copies = copies;
750 zio->io_bp_override = bp;
751}
752
753void
754zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp)
755{
756 bplist_append(&spa->spa_free_bplist[txg & TXG_MASK], bp);

--- 283 unchanged lines hidden (view full) ---

1040
1041 if (zio->io_bp_override) {
1042 ASSERT(bp->blk_birth != zio->io_txg);
1043 ASSERT(BP_GET_DEDUP(zio->io_bp_override) == 0);
1044
1045 *bp = *zio->io_bp_override;
1046 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
1047
754 zio->io_prop.zp_copies = copies;
755 zio->io_bp_override = bp;
756}
757
758void
759zio_free(spa_t *spa, uint64_t txg, const blkptr_t *bp)
760{
761 bplist_append(&spa->spa_free_bplist[txg & TXG_MASK], bp);

--- 283 unchanged lines hidden (view full) ---

1045
1046 if (zio->io_bp_override) {
1047 ASSERT(bp->blk_birth != zio->io_txg);
1048 ASSERT(BP_GET_DEDUP(zio->io_bp_override) == 0);
1049
1050 *bp = *zio->io_bp_override;
1051 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
1052
1053 /*
1054 * If we've been overridden and nopwrite is set then
1055 * set the flag accordingly to indicate that a nopwrite
1056 * has already occurred.
1057 */
1058 if (!BP_IS_HOLE(bp) && zp->zp_nopwrite) {
1059 ASSERT(!zp->zp_dedup);
1060 zio->io_flags |= ZIO_FLAG_NOPWRITE;
1061 return (ZIO_PIPELINE_CONTINUE);
1062 }
1063
1064 ASSERT(!zp->zp_nopwrite);
1065
1048 if (BP_IS_HOLE(bp) || !zp->zp_dedup)
1049 return (ZIO_PIPELINE_CONTINUE);
1050
1051 ASSERT(zio_checksum_table[zp->zp_checksum].ci_dedup ||
1052 zp->zp_dedup_verify);
1053
1054 if (BP_GET_CHECKSUM(bp) == zp->zp_checksum) {
1055 BP_SET_DEDUP(bp, 1);

--- 71 unchanged lines hidden (view full) ---

1127 BP_SET_LEVEL(bp, zp->zp_level);
1128 BP_SET_DEDUP(bp, zp->zp_dedup);
1129 BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER);
1130 if (zp->zp_dedup) {
1131 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL);
1132 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE));
1133 zio->io_pipeline = ZIO_DDT_WRITE_PIPELINE;
1134 }
1066 if (BP_IS_HOLE(bp) || !zp->zp_dedup)
1067 return (ZIO_PIPELINE_CONTINUE);
1068
1069 ASSERT(zio_checksum_table[zp->zp_checksum].ci_dedup ||
1070 zp->zp_dedup_verify);
1071
1072 if (BP_GET_CHECKSUM(bp) == zp->zp_checksum) {
1073 BP_SET_DEDUP(bp, 1);

--- 71 unchanged lines hidden (view full) ---

1145 BP_SET_LEVEL(bp, zp->zp_level);
1146 BP_SET_DEDUP(bp, zp->zp_dedup);
1147 BP_SET_BYTEORDER(bp, ZFS_HOST_BYTEORDER);
1148 if (zp->zp_dedup) {
1149 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL);
1150 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE));
1151 zio->io_pipeline = ZIO_DDT_WRITE_PIPELINE;
1152 }
1153 if (zp->zp_nopwrite) {
1154 ASSERT(zio->io_child_type == ZIO_CHILD_LOGICAL);
1155 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE));
1156 zio->io_pipeline |= ZIO_STAGE_NOP_WRITE;
1157 }
1135 }
1136
1137 return (ZIO_PIPELINE_CONTINUE);
1138}
1139
1140static int
1141zio_free_bp_init(zio_t *zio)
1142{

--- 205 unchanged lines hidden (view full) ---

1348 ASSERT(pio->io_orig_stage == ZIO_STAGE_OPEN);
1349 ASSERT(pio->io_gang_leader == NULL);
1350 ASSERT(pio->io_gang_tree == NULL);
1351
1352 pio->io_flags = pio->io_orig_flags;
1353 pio->io_stage = pio->io_orig_stage;
1354 pio->io_pipeline = pio->io_orig_pipeline;
1355 pio->io_reexecute = 0;
1158 }
1159
1160 return (ZIO_PIPELINE_CONTINUE);
1161}
1162
1163static int
1164zio_free_bp_init(zio_t *zio)
1165{

--- 205 unchanged lines hidden (view full) ---

1371 ASSERT(pio->io_orig_stage == ZIO_STAGE_OPEN);
1372 ASSERT(pio->io_gang_leader == NULL);
1373 ASSERT(pio->io_gang_tree == NULL);
1374
1375 pio->io_flags = pio->io_orig_flags;
1376 pio->io_stage = pio->io_orig_stage;
1377 pio->io_pipeline = pio->io_orig_pipeline;
1378 pio->io_reexecute = 0;
1379 pio->io_flags |= ZIO_FLAG_REEXECUTED;
1356 pio->io_error = 0;
1357 for (int w = 0; w < ZIO_WAIT_TYPES; w++)
1358 pio->io_state[w] = 0;
1359 for (int c = 0; c < ZIO_CHILD_TYPES; c++)
1360 pio->io_child_error[c] = 0;
1361
1362 if (IO_IS_ALLOCATING(pio))
1363 BP_ZERO(pio->io_bp);

--- 460 unchanged lines hidden (view full) ---

1824 SPA_MINBLOCKSIZE);
1825 ASSERT(lsize >= SPA_MINBLOCKSIZE && lsize <= resid);
1826
1827 zp.zp_checksum = gio->io_prop.zp_checksum;
1828 zp.zp_compress = ZIO_COMPRESS_OFF;
1829 zp.zp_type = DMU_OT_NONE;
1830 zp.zp_level = 0;
1831 zp.zp_copies = gio->io_prop.zp_copies;
1380 pio->io_error = 0;
1381 for (int w = 0; w < ZIO_WAIT_TYPES; w++)
1382 pio->io_state[w] = 0;
1383 for (int c = 0; c < ZIO_CHILD_TYPES; c++)
1384 pio->io_child_error[c] = 0;
1385
1386 if (IO_IS_ALLOCATING(pio))
1387 BP_ZERO(pio->io_bp);

--- 460 unchanged lines hidden (view full) ---

1848 SPA_MINBLOCKSIZE);
1849 ASSERT(lsize >= SPA_MINBLOCKSIZE && lsize <= resid);
1850
1851 zp.zp_checksum = gio->io_prop.zp_checksum;
1852 zp.zp_compress = ZIO_COMPRESS_OFF;
1853 zp.zp_type = DMU_OT_NONE;
1854 zp.zp_level = 0;
1855 zp.zp_copies = gio->io_prop.zp_copies;
1832 zp.zp_dedup = 0;
1833 zp.zp_dedup_verify = 0;
1856 zp.zp_dedup = B_FALSE;
1857 zp.zp_dedup_verify = B_FALSE;
1858 zp.zp_nopwrite = B_FALSE;
1834
1835 zio_nowait(zio_write(zio, spa, txg, &gbh->zg_blkptr[g],
1836 (char *)pio->io_data + (pio->io_size - resid), lsize, &zp,
1837 zio_write_gang_member_ready, NULL, &gn->gn_child[g],
1838 pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio),
1839 &pio->io_bookmark));
1840 }
1841
1842 /*
1843 * Set pio's pipeline to just wait for zio to finish.
1844 */
1845 pio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
1846
1847 zio_nowait(zio);
1848
1849 return (ZIO_PIPELINE_CONTINUE);
1850}
1851
1852/*
1859
1860 zio_nowait(zio_write(zio, spa, txg, &gbh->zg_blkptr[g],
1861 (char *)pio->io_data + (pio->io_size - resid), lsize, &zp,
1862 zio_write_gang_member_ready, NULL, &gn->gn_child[g],
1863 pio->io_priority, ZIO_GANG_CHILD_FLAGS(pio),
1864 &pio->io_bookmark));
1865 }
1866
1867 /*
1868 * Set pio's pipeline to just wait for zio to finish.
1869 */
1870 pio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
1871
1872 zio_nowait(zio);
1873
1874 return (ZIO_PIPELINE_CONTINUE);
1875}
1876
1877/*
1878 * The zio_nop_write stage in the pipeline determines if allocating
1879 * a new bp is necessary. By leveraging a cryptographically secure checksum,
1880 * such as SHA256, we can compare the checksums of the new data and the old
1881 * to determine if allocating a new block is required. The nopwrite
1882 * feature can handle writes in either syncing or open context (i.e. zil
1883 * writes) and as a result is mutually exclusive with dedup.
1884 */
1885static int
1886zio_nop_write(zio_t *zio)
1887{
1888 blkptr_t *bp = zio->io_bp;
1889 blkptr_t *bp_orig = &zio->io_bp_orig;
1890 zio_prop_t *zp = &zio->io_prop;
1891
1892 ASSERT(BP_GET_LEVEL(bp) == 0);
1893 ASSERT(!(zio->io_flags & ZIO_FLAG_IO_REWRITE));
1894 ASSERT(zp->zp_nopwrite);
1895 ASSERT(!zp->zp_dedup);
1896 ASSERT(zio->io_bp_override == NULL);
1897 ASSERT(IO_IS_ALLOCATING(zio));
1898
1899 /*
1900 * Check to see if the original bp and the new bp have matching
1901 * characteristics (i.e. same checksum, compression algorithms, etc).
1902 * If they don't then just continue with the pipeline which will
1903 * allocate a new bp.
1904 */
1905 if (BP_IS_HOLE(bp_orig) ||
1906 !zio_checksum_table[BP_GET_CHECKSUM(bp)].ci_dedup ||
1907 BP_GET_CHECKSUM(bp) != BP_GET_CHECKSUM(bp_orig) ||
1908 BP_GET_COMPRESS(bp) != BP_GET_COMPRESS(bp_orig) ||
1909 BP_GET_DEDUP(bp) != BP_GET_DEDUP(bp_orig) ||
1910 zp->zp_copies != BP_GET_NDVAS(bp_orig))
1911 return (ZIO_PIPELINE_CONTINUE);
1912
1913 /*
1914 * If the checksums match then reset the pipeline so that we
1915 * avoid allocating a new bp and issuing any I/O.
1916 */
1917 if (ZIO_CHECKSUM_EQUAL(bp->blk_cksum, bp_orig->blk_cksum)) {
1918 ASSERT(zio_checksum_table[zp->zp_checksum].ci_dedup);
1919 ASSERT3U(BP_GET_PSIZE(bp), ==, BP_GET_PSIZE(bp_orig));
1920 ASSERT3U(BP_GET_LSIZE(bp), ==, BP_GET_LSIZE(bp_orig));
1921 ASSERT(zp->zp_compress != ZIO_COMPRESS_OFF);
1922 ASSERT(bcmp(&bp->blk_prop, &bp_orig->blk_prop,
1923 sizeof (uint64_t)) == 0);
1924
1925 *bp = *bp_orig;
1926 zio->io_pipeline = ZIO_INTERLOCK_PIPELINE;
1927 zio->io_flags |= ZIO_FLAG_NOPWRITE;
1928 }
1929
1930 return (ZIO_PIPELINE_CONTINUE);
1931}
1932
1933/*
1853 * ==========================================================================
1854 * Dedup
1855 * ==========================================================================
1856 */
1857static void
1858zio_ddt_child_read_done(zio_t *zio)
1859{
1860 blkptr_t *bp = zio->io_bp;

--- 255 unchanged lines hidden (view full) ---

2116 * (And automatically e-mail a paper to Nature?)
2117 */
2118 if (!zio_checksum_table[zp->zp_checksum].ci_dedup) {
2119 zp->zp_checksum = spa_dedup_checksum(spa);
2120 zio_pop_transforms(zio);
2121 zio->io_stage = ZIO_STAGE_OPEN;
2122 BP_ZERO(bp);
2123 } else {
1934 * ==========================================================================
1935 * Dedup
1936 * ==========================================================================
1937 */
1938static void
1939zio_ddt_child_read_done(zio_t *zio)
1940{
1941 blkptr_t *bp = zio->io_bp;

--- 255 unchanged lines hidden (view full) ---

2197 * (And automatically e-mail a paper to Nature?)
2198 */
2199 if (!zio_checksum_table[zp->zp_checksum].ci_dedup) {
2200 zp->zp_checksum = spa_dedup_checksum(spa);
2201 zio_pop_transforms(zio);
2202 zio->io_stage = ZIO_STAGE_OPEN;
2203 BP_ZERO(bp);
2204 } else {
2124 zp->zp_dedup = 0;
2205 zp->zp_dedup = B_FALSE;
2125 }
2126 zio->io_pipeline = ZIO_WRITE_PIPELINE;
2127 ddt_exit(ddt);
2128 return (ZIO_PIPELINE_CONTINUE);
2129 }
2130
2131 ditto_copies = ddt_ditto_copies_needed(ddt, dde, ddp);
2132 ASSERT(ditto_copies < SPA_DVAS_PER_BP);

--- 640 unchanged lines hidden (view full) ---

2773 zio_t *pio, *pio_next;
2774
2775 if (zio_wait_for_children(zio, ZIO_CHILD_GANG, ZIO_WAIT_READY) ||
2776 zio_wait_for_children(zio, ZIO_CHILD_DDT, ZIO_WAIT_READY))
2777 return (ZIO_PIPELINE_STOP);
2778
2779 if (zio->io_ready) {
2780 ASSERT(IO_IS_ALLOCATING(zio));
2206 }
2207 zio->io_pipeline = ZIO_WRITE_PIPELINE;
2208 ddt_exit(ddt);
2209 return (ZIO_PIPELINE_CONTINUE);
2210 }
2211
2212 ditto_copies = ddt_ditto_copies_needed(ddt, dde, ddp);
2213 ASSERT(ditto_copies < SPA_DVAS_PER_BP);

--- 640 unchanged lines hidden (view full) ---

2854 zio_t *pio, *pio_next;
2855
2856 if (zio_wait_for_children(zio, ZIO_CHILD_GANG, ZIO_WAIT_READY) ||
2857 zio_wait_for_children(zio, ZIO_CHILD_DDT, ZIO_WAIT_READY))
2858 return (ZIO_PIPELINE_STOP);
2859
2860 if (zio->io_ready) {
2861 ASSERT(IO_IS_ALLOCATING(zio));
2781 ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp));
2862 ASSERT(bp->blk_birth == zio->io_txg || BP_IS_HOLE(bp) ||
2863 (zio->io_flags & ZIO_FLAG_NOPWRITE));
2782 ASSERT(zio->io_children[ZIO_CHILD_GANG][ZIO_WAIT_READY] == 0);
2783
2784 zio->io_ready(zio);
2785 }
2786
2787 if (bp != NULL && bp != &zio->io_bp_copy)
2788 zio->io_bp_copy = *bp;
2789

--- 65 unchanged lines hidden (view full) ---

2855 if (zio->io_type == ZIO_TYPE_WRITE && !BP_IS_HOLE(bp) &&
2856 zio->io_bp_override == NULL &&
2857 !(zio->io_flags & ZIO_FLAG_IO_REPAIR)) {
2858 ASSERT(!BP_SHOULD_BYTESWAP(bp));
2859 ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(bp));
2860 ASSERT(BP_COUNT_GANG(bp) == 0 ||
2861 (BP_COUNT_GANG(bp) == BP_GET_NDVAS(bp)));
2862 }
2864 ASSERT(zio->io_children[ZIO_CHILD_GANG][ZIO_WAIT_READY] == 0);
2865
2866 zio->io_ready(zio);
2867 }
2868
2869 if (bp != NULL && bp != &zio->io_bp_copy)
2870 zio->io_bp_copy = *bp;
2871

--- 65 unchanged lines hidden (view full) ---

2937 if (zio->io_type == ZIO_TYPE_WRITE && !BP_IS_HOLE(bp) &&
2938 zio->io_bp_override == NULL &&
2939 !(zio->io_flags & ZIO_FLAG_IO_REPAIR)) {
2940 ASSERT(!BP_SHOULD_BYTESWAP(bp));
2941 ASSERT3U(zio->io_prop.zp_copies, <=, BP_GET_NDVAS(bp));
2942 ASSERT(BP_COUNT_GANG(bp) == 0 ||
2943 (BP_COUNT_GANG(bp) == BP_GET_NDVAS(bp)));
2944 }
2945 if (zio->io_flags & ZIO_FLAG_NOPWRITE)
2946 VERIFY(BP_EQUAL(bp, &zio->io_bp_orig));
2863 }
2864
2865 /*
2866 * If there were child vdev/gang/ddt errors, they apply to us now.
2867 */
2868 zio_inherit_child_errors(zio, ZIO_CHILD_VDEV);
2869 zio_inherit_child_errors(zio, ZIO_CHILD_GANG);
2870 zio_inherit_child_errors(zio, ZIO_CHILD_DDT);

--- 93 unchanged lines hidden (view full) ---

2964 * We defer this until now to avoid conflating logical child
2965 * errors with errors that happened to the zio itself when
2966 * updating vdev stats and reporting FMA events above.
2967 */
2968 zio_inherit_child_errors(zio, ZIO_CHILD_LOGICAL);
2969
2970 if ((zio->io_error || zio->io_reexecute) &&
2971 IO_IS_ALLOCATING(zio) && zio->io_gang_leader == zio &&
2947 }
2948
2949 /*
2950 * If there were child vdev/gang/ddt errors, they apply to us now.
2951 */
2952 zio_inherit_child_errors(zio, ZIO_CHILD_VDEV);
2953 zio_inherit_child_errors(zio, ZIO_CHILD_GANG);
2954 zio_inherit_child_errors(zio, ZIO_CHILD_DDT);

--- 93 unchanged lines hidden (view full) ---

3048 * We defer this until now to avoid conflating logical child
3049 * errors with errors that happened to the zio itself when
3050 * updating vdev stats and reporting FMA events above.
3051 */
3052 zio_inherit_child_errors(zio, ZIO_CHILD_LOGICAL);
3053
3054 if ((zio->io_error || zio->io_reexecute) &&
3055 IO_IS_ALLOCATING(zio) && zio->io_gang_leader == zio &&
2972 !(zio->io_flags & ZIO_FLAG_IO_REWRITE))
3056 !(zio->io_flags & (ZIO_FLAG_IO_REWRITE | ZIO_FLAG_NOPWRITE)))
2973 zio_dva_unallocate(zio, zio->io_gang_tree, bp);
2974
2975 zio_gang_tree_free(&zio->io_gang_tree);
2976
2977 /*
2978 * Godfather I/Os should never suspend.
2979 */
2980 if ((zio->io_flags & ZIO_FLAG_GODFATHER) &&

--- 127 unchanged lines hidden (view full) ---

3108 */
3109static zio_pipe_stage_t *zio_pipeline[] = {
3110 NULL,
3111 zio_read_bp_init,
3112 zio_free_bp_init,
3113 zio_issue_async,
3114 zio_write_bp_init,
3115 zio_checksum_generate,
3057 zio_dva_unallocate(zio, zio->io_gang_tree, bp);
3058
3059 zio_gang_tree_free(&zio->io_gang_tree);
3060
3061 /*
3062 * Godfather I/Os should never suspend.
3063 */
3064 if ((zio->io_flags & ZIO_FLAG_GODFATHER) &&

--- 127 unchanged lines hidden (view full) ---

3192 */
3193static zio_pipe_stage_t *zio_pipeline[] = {
3194 NULL,
3195 zio_read_bp_init,
3196 zio_free_bp_init,
3197 zio_issue_async,
3198 zio_write_bp_init,
3199 zio_checksum_generate,
3200 zio_nop_write,
3116 zio_ddt_read_start,
3117 zio_ddt_read_done,
3118 zio_ddt_write,
3119 zio_ddt_free,
3120 zio_gang_assemble,
3121 zio_gang_issue,
3122 zio_dva_allocate,
3123 zio_dva_free,

--- 50 unchanged lines hidden ---
3201 zio_ddt_read_start,
3202 zio_ddt_read_done,
3203 zio_ddt_write,
3204 zio_ddt_free,
3205 zio_gang_assemble,
3206 zio_gang_issue,
3207 zio_dva_allocate,
3208 zio_dva_free,

--- 50 unchanged lines hidden ---