Skip to content

Commit f8a1484

Browse files
author
Paul Dagnelie
committed
Try alternate preallocated impl
Signed-off-by: Paul Dagnelie <paul.dagnelie@klarasystems.com>
1 parent 611c2a9 commit f8a1484

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

module/zfs/zio.c

+14-8
Original file line numberDiff line numberDiff line change
@@ -1022,6 +1022,10 @@ zio_create(zio_t *pio, spa_t *spa, uint64_t txg, const blkptr_t *bp,
10221022
zio->io_logical = zio;
10231023
if (zio->io_child_type > ZIO_CHILD_GANG && BP_IS_GANG(bp))
10241024
pipeline |= ZIO_GANG_STAGES;
1025+
if (flags & ZIO_FLAG_PREALLOCATED) {
1026+
BP_ZERO_DVAS(zio->io_bp);
1027+
BP_SET_BIRTH(zio->io_bp, 0, 0);
1028+
}
10251029
}
10261030

10271031
zio->io_spa = spa;
@@ -1962,8 +1966,7 @@ zio_write_compress(zio_t *zio)
19621966
ASSERT(zio->io_child_type != ZIO_CHILD_DDT);
19631967
ASSERT(zio->io_bp_override == NULL);
19641968

1965-
if (!BP_IS_HOLE(bp) && BP_GET_LOGICAL_BIRTH(bp) == zio->io_txg &&
1966-
!(zio->io_flags & ZIO_FLAG_PREALLOCATED)) {
1969+
if (!BP_IS_HOLE(bp) && BP_GET_LOGICAL_BIRTH(bp) == zio->io_txg) {
19671970
/*
19681971
* We're rewriting an existing block, which means we're
19691972
* working on behalf of spa_sync(). For spa_sync() to
@@ -2109,8 +2112,7 @@ zio_write_compress(zio_t *zio)
21092112
zio->io_pipeline = ZIO_REWRITE_PIPELINE | gang_stages;
21102113
zio->io_flags |= ZIO_FLAG_IO_REWRITE;
21112114
} else {
2112-
if (!(zio->io_flags & ZIO_FLAG_PREALLOCATED))
2113-
BP_ZERO(bp);
2115+
BP_ZERO(bp);
21142116
zio->io_pipeline = ZIO_WRITE_PIPELINE;
21152117
}
21162118

@@ -3252,8 +3254,9 @@ zio_write_gang_block(zio_t *pio, metaslab_class_t *mc)
32523254
zio_gang_inherit_allocator(zio, cio);
32533255
if (allocated) {
32543256
metaslab_trace_move(&cio_list, &cio->io_alloc_list);
3255-
metaslab_group_alloc_increment_all(spa, bp,
3256-
zio->io_allocator, flags, psize, cio);
3257+
metaslab_group_alloc_increment_all(spa,
3258+
&cio->io_bp_orig, zio->io_allocator, flags, psize,
3259+
cio);
32573260
}
32583261
/*
32593262
* We do not reserve for the child writes, since we already
@@ -4133,6 +4136,10 @@ zio_dva_allocate(zio_t *zio)
41334136
zio->io_gang_leader = zio;
41344137
}
41354138
if (zio->io_flags & ZIO_FLAG_PREALLOCATED) {
4139+
memcpy(zio->io_bp->blk_dva, zio->io_bp_orig.blk_dva,
4140+
3 * sizeof (dva_t));
4141+
BP_SET_BIRTH(zio->io_bp, BP_GET_LOGICAL_BIRTH(&zio->io_bp_orig),
4142+
BP_GET_PHYSICAL_BIRTH(&zio->io_bp_orig));
41364143
ASSERT3U(zio->io_child_type, ==, ZIO_CHILD_GANG);
41374144
return (zio);
41384145
}
@@ -5153,8 +5160,7 @@ zio_ready(zio_t *zio)
51535160
if (zio->io_ready) {
51545161
ASSERT(IO_IS_ALLOCATING(zio));
51555162
ASSERT(BP_GET_LOGICAL_BIRTH(bp) == zio->io_txg ||
5156-
BP_IS_HOLE(bp) || (zio->io_flags & ZIO_FLAG_NOPWRITE) ||
5157-
(zio->io_flags & ZIO_FLAG_PREALLOCATED));
5163+
BP_IS_HOLE(bp) || (zio->io_flags & ZIO_FLAG_NOPWRITE));
51585164
ASSERT(zio->io_children[ZIO_CHILD_GANG][ZIO_WAIT_READY] == 0);
51595165

51605166
zio->io_ready(zio);

0 commit comments

Comments
 (0)