Skip to content

Commit 1a14e87

Browse files
author
Paul Dagnelie
committed
Add asize to psize logic
Signed-off-by: Paul Dagnelie <paul.dagnelie@klarasystems.com>
1 parent f3faab2 commit 1a14e87

18 files changed

+124
-52
lines changed

include/sys/metaslab.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ int metaslab_alloc(spa_t *, metaslab_class_t *, uint64_t,
8888
int);
8989
int metaslab_alloc_range(spa_t *, metaslab_class_t *, uint64_t, uint64_t,
9090
blkptr_t *, int, uint64_t, blkptr_t *, int, zio_alloc_list_t *, zio_t *,
91-
int);
91+
int, uint64_t *);
9292
int metaslab_alloc_dva(spa_t *, metaslab_class_t *, uint64_t,
9393
dva_t *, int, dva_t *, uint64_t, int, zio_alloc_list_t *, int);
9494
void metaslab_free(spa_t *, const blkptr_t *, uint64_t, boolean_t);

include/sys/vdev.h

+2
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,8 @@ extern void vdev_space_update(vdev_t *vd,
132132

133133
extern int64_t vdev_deflated_space(vdev_t *vd, int64_t space);
134134

135+
extern uint64_t vdev_asize_to_psize_txg(vdev_t *vd, uint64_t asize,
136+
uint64_t txg);
135137
extern uint64_t vdev_psize_to_asize_txg(vdev_t *vd, uint64_t psize,
136138
uint64_t txg);
137139
extern uint64_t vdev_psize_to_asize(vdev_t *vd, uint64_t psize);

include/sys/vdev_draid.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ extern int vdev_draid_generate_perms(const draid_map_t *, uint8_t **);
9494
*/
9595
extern boolean_t vdev_draid_readable(vdev_t *, uint64_t);
9696
extern boolean_t vdev_draid_missing(vdev_t *, uint64_t, uint64_t, uint64_t);
97-
extern uint64_t vdev_draid_asize_to_psize(vdev_t *, uint64_t);
97+
extern uint64_t vdev_draid_asize_to_psize(vdev_t *, uint64_t, uint64_t);
9898
extern void vdev_draid_map_alloc_empty(zio_t *, struct raidz_row *);
9999
extern int vdev_draid_map_verify_empty(zio_t *, struct raidz_row *);
100100
extern nvlist_t *vdev_draid_read_config_spare(vdev_t *);

include/sys/vdev_impl.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ typedef const struct vdev_ops {
106106
vdev_fini_func_t *vdev_op_fini;
107107
vdev_open_func_t *vdev_op_open;
108108
vdev_close_func_t *vdev_op_close;
109-
vdev_asize_func_t *vdev_op_asize;
109+
vdev_asize_func_t *vdev_op_psize_to_asize;
110+
vdev_asize_func_t *vdev_op_asize_to_psize;
110111
vdev_min_asize_func_t *vdev_op_min_asize;
111112
vdev_min_alloc_func_t *vdev_op_min_alloc;
112113
vdev_io_start_func_t *vdev_op_io_start;
@@ -618,6 +619,7 @@ extern vdev_ops_t vdev_indirect_ops;
618619
*/
619620
extern void vdev_default_xlate(vdev_t *vd, const zfs_range_seg64_t *logical_rs,
620621
zfs_range_seg64_t *physical_rs, zfs_range_seg64_t *remain_rs);
622+
extern uint64_t vdev_default_psize(vdev_t *vd, uint64_t asize, uint64_t txg);
621623
extern uint64_t vdev_default_asize(vdev_t *vd, uint64_t psize, uint64_t txg);
622624
extern uint64_t vdev_default_min_asize(vdev_t *vd);
623625
extern uint64_t vdev_get_min_asize(vdev_t *vd);

lib/libzfs/libzfs_dataset.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -5409,7 +5409,7 @@ zfs_get_holds(zfs_handle_t *zhp, nvlist_t **nvl)
54095409
* +-------+-------+-------+-------+-------+
54105410
*
54115411
* Above, notice that the 4k block required one sector for parity and another
5412-
* for data. vdev_raidz_asize() will return 8k and as such the pool's allocated
5412+
* for data. vdev_raidz_psize_to_asize() will return 8k and as such the pool's allocated
54135413
* and free properties will be adjusted by 8k. The dataset will not be charged
54145414
* 8k. Rather, it will be charged a value that is scaled according to the
54155415
* overhead of the 128k block on the same vdev. This 8k allocation will be
@@ -5461,7 +5461,7 @@ zfs_get_holds(zfs_handle_t *zhp, nvlist_t **nvl)
54615461
* not necessarily equal to "blksize", due to RAIDZ deflation.
54625462
*/
54635463
static uint64_t
5464-
vdev_raidz_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
5464+
vdev_raidz_psize_to_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
54655465
uint64_t blksize)
54665466
{
54675467
uint64_t asize, ndata;
@@ -5481,7 +5481,7 @@ vdev_raidz_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
54815481
* size.
54825482
*/
54835483
static uint64_t
5484-
vdev_draid_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
5484+
vdev_draid_psize_to_asize(uint64_t ndisks, uint64_t nparity, uint64_t ashift,
54855485
uint64_t blksize)
54865486
{
54875487
ASSERT3U(ndisks, >, nparity);
@@ -5541,11 +5541,11 @@ volsize_from_vdevs(zpool_handle_t *zhp, uint64_t nblocks, uint64_t blksize)
55415541
continue;
55425542

55435543
/* allocation size for the "typical" 128k block */
5544-
tsize = vdev_raidz_asize(ndisks, nparity, ashift,
5544+
tsize = vdev_raidz_psize_to_asize(ndisks, nparity, ashift,
55455545
SPA_OLD_MAXBLOCKSIZE);
55465546

55475547
/* allocation size for the blksize block */
5548-
asize = vdev_raidz_asize(ndisks, nparity, ashift,
5548+
asize = vdev_raidz_psize_to_asize(ndisks, nparity, ashift,
55495549
blksize);
55505550
} else {
55515551
uint64_t ndata;
@@ -5555,11 +5555,11 @@ volsize_from_vdevs(zpool_handle_t *zhp, uint64_t nblocks, uint64_t blksize)
55555555
continue;
55565556

55575557
/* allocation size for the "typical" 128k block */
5558-
tsize = vdev_draid_asize(ndata + nparity, nparity,
5558+
tsize = vdev_draid_psize_to_asize(ndata + nparity, nparity,
55595559
ashift, SPA_OLD_MAXBLOCKSIZE);
55605560

55615561
/* allocation size for the blksize block */
5562-
asize = vdev_draid_asize(ndata + nparity, nparity,
5562+
asize = vdev_draid_psize_to_asize(ndata + nparity, nparity,
55635563
ashift, blksize);
55645564
}
55655565

module/os/freebsd/zfs/vdev_geom.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1275,7 +1275,8 @@ vdev_ops_t vdev_disk_ops = {
12751275
.vdev_op_fini = NULL,
12761276
.vdev_op_open = vdev_geom_open,
12771277
.vdev_op_close = vdev_geom_close,
1278-
.vdev_op_asize = vdev_default_asize,
1278+
.vdev_op_psize_to_asize = vdev_default_asize,
1279+
.vdev_op_asize_to_psize = vdev_default_psize,
12791280
.vdev_op_min_asize = vdev_default_min_asize,
12801281
.vdev_op_min_alloc = NULL,
12811282
.vdev_op_io_start = vdev_geom_io_start,

module/os/linux/zfs/vdev_disk.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,8 @@ vdev_ops_t vdev_disk_ops = {
15531553
.vdev_op_fini = NULL,
15541554
.vdev_op_open = vdev_disk_open,
15551555
.vdev_op_close = vdev_disk_close,
1556-
.vdev_op_asize = vdev_default_asize,
1556+
.vdev_op_asize_to_psize = vdev_default_psize,
1557+
.vdev_op_psize_to_asize = vdev_default_asize,
15571558
.vdev_op_min_asize = vdev_default_min_asize,
15581559
.vdev_op_min_alloc = NULL,
15591560
.vdev_op_io_start = vdev_disk_io_start,

module/zfs/metaslab.c

+19-7
Original file line numberDiff line numberDiff line change
@@ -5230,7 +5230,7 @@ metaslab_group_alloc(metaslab_group_t *mg, zio_alloc_list_t *zal,
52305230
static int
52315231
metaslab_alloc_dva_range(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
52325232
uint64_t max_psize, dva_t *dva, int d, dva_t *hintdva, uint64_t txg,
5233-
int flags, zio_alloc_list_t *zal, int allocator)
5233+
int flags, zio_alloc_list_t *zal, int allocator, uint64_t *actual_psize)
52345234
{
52355235
metaslab_class_allocator_t *mca = &mc->mc_allocator[allocator];
52365236
metaslab_group_t *mg, *rotor;
@@ -5253,9 +5253,13 @@ metaslab_alloc_dva_range(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
52535253
allocator);
52545254
return (SET_ERROR(ENOSPC));
52555255
}
5256-
if (max_psize > psize && max_psize >= metaslab_force_ganging) {
5257-
max_psize = (metaslab_force_ganging - psize) / 2 + psize;
5256+
if (max_psize > psize && max_psize >= metaslab_force_ganging &&
5257+
metaslab_force_ganging_pct > 0 &&
5258+
(random_in_range(100) < MIN(metaslab_force_ganging_pct, 100))) {
5259+
max_psize = MAX((psize + max_psize) / 2,
5260+
metaslab_force_ganging);
52585261
}
5262+
ASSERT3U(psize, <=, max_psize);
52595263

52605264
/*
52615265
* Start at the rotor and loop through all mgs until we find something.
@@ -5377,6 +5381,8 @@ metaslab_alloc_dva_range(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
53775381
uint64_t offset = metaslab_group_alloc(mg, zal, asize,
53785382
max_asize, txg, !try_hard, dva, d, allocator, try_hard,
53795383
&asize);
5384+
if (actual_psize)
5385+
*actual_psize = vdev_asize_to_psize_txg(vd, asize, txg);
53805386

53815387
if (offset != -1ULL) {
53825388
/*
@@ -5471,7 +5477,7 @@ metaslab_alloc_dva(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
54715477
zio_alloc_list_t *zal, int allocator)
54725478
{
54735479
return (metaslab_alloc_dva_range(spa, mc, psize, psize, dva, d, hintdva,
5474-
txg, flags, zal, allocator));
5480+
txg, flags, zal, allocator, NULL));
54755481
}
54765482

54775483
void
@@ -5952,14 +5958,14 @@ metaslab_alloc(spa_t *spa, metaslab_class_t *mc, uint64_t psize, blkptr_t *bp,
59525958
zio_alloc_list_t *zal, zio_t *zio, int allocator)
59535959
{
59545960
return (metaslab_alloc_range(spa, mc, psize, psize, bp, ndvas, txg,
5955-
hintbp, flags, zal, zio, allocator));
5961+
hintbp, flags, zal, zio, allocator, NULL));
59565962
}
59575963

59585964
int
59595965
metaslab_alloc_range(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
59605966
uint64_t max_psize, blkptr_t *bp, int ndvas, uint64_t txg,
59615967
blkptr_t *hintbp, int flags, zio_alloc_list_t *zal, zio_t *zio,
5962-
int allocator)
5968+
int allocator, uint64_t *actual_psize)
59635969
{
59645970
dva_t *dva = bp->blk_dva;
59655971
dva_t *hintdva = (hintbp != NULL) ? hintbp->blk_dva : NULL;
@@ -5981,9 +5987,11 @@ metaslab_alloc_range(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
59815987
ASSERT(hintbp == NULL || ndvas <= BP_GET_NDVAS(hintbp));
59825988
ASSERT3P(zal, !=, NULL);
59835989

5990+
uint64_t cur_psize = 0, min_psize = UINT64_MAX;
5991+
59845992
for (int d = 0; d < ndvas; d++) {
59855993
error = metaslab_alloc_dva_range(spa, mc, psize, max_psize,
5986-
dva, d, hintdva, txg, flags, zal, allocator);
5994+
dva, d, hintdva, txg, flags, zal, allocator, &cur_psize);
59875995
if (error != 0) {
59885996
for (d--; d >= 0; d--) {
59895997
metaslab_unalloc_dva(spa, &dva[d], txg);
@@ -6001,10 +6009,14 @@ metaslab_alloc_range(spa_t *spa, metaslab_class_t *mc, uint64_t psize,
60016009
*/
60026010
metaslab_group_alloc_increment(spa,
60036011
DVA_GET_VDEV(&dva[d]), zio, flags, allocator);
6012+
min_psize = MIN(cur_psize, min_psize);
60046013
}
60056014
}
60066015
ASSERT(error == 0);
60076016
ASSERT(BP_GET_NDVAS(bp) == ndvas);
6017+
ASSERT3U(min_psize, !=, UINT64_MAX);
6018+
if (actual_psize)
6019+
*actual_psize = min_psize;
60086020

60096021
spa_config_exit(spa, SCL_ALLOC, FTAG);
60106022

module/zfs/vdev.c

+20-2
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,19 @@ vdev_derive_alloc_bias(const char *bias)
322322
return (alloc_bias);
323323
}
324324

325+
uint64_t
326+
vdev_default_psize(vdev_t *vd, uint64_t asize, uint64_t txg)
327+
{
328+
ASSERT0(asize % (1ULL << vd->vdev_top->vdev_ashift));
329+
uint64_t csize, psize = asize;
330+
for (int c = 0; c < vd->vdev_children; c++) {
331+
csize = vdev_asize_to_psize_txg(vd->vdev_child[c], asize, txg);
332+
psize = MIN(psize, csize);
333+
}
334+
335+
return (psize);
336+
}
337+
325338
/*
326339
* Default asize function: return the MAX of psize with the asize of
327340
* all children. This is what's used by anything other than RAID-Z.
@@ -4114,17 +4127,22 @@ vdev_sync(vdev_t *vd, uint64_t txg)
41144127
(void) txg_list_add(&spa->spa_vdev_txg_list, vd, TXG_CLEAN(txg));
41154128
dmu_tx_commit(tx);
41164129
}
4130+
uint64_t
4131+
vdev_asize_to_psize_txg(vdev_t *vd, uint64_t asize, uint64_t txg)
4132+
{
4133+
return (vd->vdev_ops->vdev_op_asize_to_psize(vd, asize, txg));
4134+
}
41174135

41184136
/*
41194137
* Return the amount of space that should be (or was) allocated for the given
41204138
* psize (compressed block size) in the given TXG. Note that for expanded
41214139
* RAIDZ vdevs, the size allocated for older BP's may be larger. See
4122-
* vdev_raidz_asize().
4140+
* vdev_raidz_psize_to_asize().
41234141
*/
41244142
uint64_t
41254143
vdev_psize_to_asize_txg(vdev_t *vd, uint64_t psize, uint64_t txg)
41264144
{
4127-
return (vd->vdev_ops->vdev_op_asize(vd, psize, txg));
4145+
return (vd->vdev_ops->vdev_op_psize_to_asize(vd, psize, txg));
41284146
}
41294147

41304148
uint64_t

module/zfs/vdev_draid.c

+12-9
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ vdev_draid_permute_id(vdev_draid_config_t *vdc,
577577
* i.e. vdev_draid_psize_to_asize().
578578
*/
579579
static uint64_t
580-
vdev_draid_asize(vdev_t *vd, uint64_t psize, uint64_t txg)
580+
vdev_draid_psize_to_asize(vdev_t *vd, uint64_t psize, uint64_t txg)
581581
{
582582
(void) txg;
583583
vdev_draid_config_t *vdc = vd->vdev_tsd;
@@ -598,8 +598,9 @@ vdev_draid_asize(vdev_t *vd, uint64_t psize, uint64_t txg)
598598
* Deflate the asize to the psize, this includes stripping parity.
599599
*/
600600
uint64_t
601-
vdev_draid_asize_to_psize(vdev_t *vd, uint64_t asize)
601+
vdev_draid_asize_to_psize(vdev_t *vd, uint64_t asize, uint64_t txg)
602602
{
603+
(void) txg;
603604
vdev_draid_config_t *vdc = vd->vdev_tsd;
604605

605606
ASSERT0(asize % vdc->vdc_groupwidth);
@@ -961,7 +962,7 @@ vdev_draid_map_alloc_row(zio_t *zio, raidz_row_t **rrp, uint64_t io_offset,
961962
vdev_draid_config_t *vdc = vd->vdev_tsd;
962963
uint64_t ashift = vd->vdev_top->vdev_ashift;
963964
uint64_t io_size = abd_size;
964-
uint64_t io_asize = vdev_draid_asize(vd, io_size, 0);
965+
uint64_t io_asize = vdev_draid_psize_to_asize(vd, io_size, 0);
965966
uint64_t group = vdev_draid_offset_to_group(vd, io_offset);
966967
uint64_t start_offset = vdev_draid_group_to_offset(vd, group + 1);
967968

@@ -971,7 +972,7 @@ vdev_draid_map_alloc_row(zio_t *zio, raidz_row_t **rrp, uint64_t io_offset,
971972
*/
972973
if (io_offset + io_asize > start_offset) {
973974
io_size = vdev_draid_asize_to_psize(vd,
974-
start_offset - io_offset);
975+
start_offset - io_offset, 0);
975976
}
976977

977978
/*
@@ -1116,7 +1117,7 @@ vdev_draid_map_alloc(zio_t *zio)
11161117
if (size < abd_size) {
11171118
vdev_t *vd = zio->io_vd;
11181119

1119-
io_offset += vdev_draid_asize(vd, size, 0);
1120+
io_offset += vdev_draid_psize_to_asize(vd, size, 0);
11201121
abd_offset += size;
11211122
abd_size -= size;
11221123
nrows++;
@@ -1769,7 +1770,7 @@ vdev_draid_need_resilver(vdev_t *vd, const dva_t *dva, size_t psize,
17691770
uint64_t phys_birth)
17701771
{
17711772
uint64_t offset = DVA_GET_OFFSET(dva);
1772-
uint64_t asize = vdev_draid_asize(vd, psize, 0);
1773+
uint64_t asize = vdev_draid_psize_to_asize(vd, psize, 0);
17731774

17741775
if (phys_birth == TXG_UNKNOWN) {
17751776
/*
@@ -1826,7 +1827,7 @@ vdev_draid_io_verify(vdev_t *vd, raidz_row_t *rr, int col)
18261827
zfs_range_seg64_t logical_rs, physical_rs, remain_rs;
18271828
logical_rs.rs_start = rr->rr_offset;
18281829
logical_rs.rs_end = logical_rs.rs_start +
1829-
vdev_draid_asize(vd, rr->rr_size, 0);
1830+
vdev_draid_psize_to_asize(vd, rr->rr_size, 0);
18301831

18311832
raidz_col_t *rc = &rr->rr_col[col];
18321833
vdev_t *cvd = vd->vdev_child[rc->rc_devidx];
@@ -2310,7 +2311,8 @@ vdev_ops_t vdev_draid_ops = {
23102311
.vdev_op_fini = vdev_draid_fini,
23112312
.vdev_op_open = vdev_draid_open,
23122313
.vdev_op_close = vdev_draid_close,
2313-
.vdev_op_asize = vdev_draid_asize,
2314+
.vdev_op_psize_to_asize = vdev_draid_psize_to_asize,
2315+
.vdev_op_asize_to_psize = vdev_draid_asize_to_psize,
23142316
.vdev_op_min_asize = vdev_draid_min_asize,
23152317
.vdev_op_min_alloc = vdev_draid_min_alloc,
23162318
.vdev_op_io_start = vdev_draid_io_start,
@@ -2800,7 +2802,8 @@ vdev_ops_t vdev_draid_spare_ops = {
28002802
.vdev_op_fini = vdev_draid_spare_fini,
28012803
.vdev_op_open = vdev_draid_spare_open,
28022804
.vdev_op_close = vdev_draid_spare_close,
2803-
.vdev_op_asize = vdev_default_asize,
2805+
.vdev_op_psize_to_asize = vdev_default_asize,
2806+
.vdev_op_asize_to_psize = vdev_default_psize,
28042807
.vdev_op_min_asize = vdev_default_min_asize,
28052808
.vdev_op_min_alloc = NULL,
28062809
.vdev_op_io_start = vdev_draid_spare_io_start,

module/zfs/vdev_file.c

+3-2
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,8 @@ vdev_ops_t vdev_file_ops = {
312312
.vdev_op_fini = NULL,
313313
.vdev_op_open = vdev_file_open,
314314
.vdev_op_close = vdev_file_close,
315-
.vdev_op_asize = vdev_default_asize,
315+
.vdev_op_psize_to_asize = vdev_default_asize,
316+
.vdev_op_asize_to_psize = vdev_default_psize,
316317
.vdev_op_min_asize = vdev_default_min_asize,
317318
.vdev_op_min_alloc = NULL,
318319
.vdev_op_io_start = vdev_file_io_start,
@@ -342,7 +343,7 @@ vdev_ops_t vdev_disk_ops = {
342343
.vdev_op_fini = NULL,
343344
.vdev_op_open = vdev_file_open,
344345
.vdev_op_close = vdev_file_close,
345-
.vdev_op_asize = vdev_default_asize,
346+
.vdev_op_psize_to_asize = vdev_default_asize,
346347
.vdev_op_min_asize = vdev_default_min_asize,
347348
.vdev_op_min_alloc = NULL,
348349
.vdev_op_io_start = vdev_file_io_start,

module/zfs/vdev_indirect.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -1866,7 +1866,8 @@ vdev_ops_t vdev_indirect_ops = {
18661866
.vdev_op_fini = NULL,
18671867
.vdev_op_open = vdev_indirect_open,
18681868
.vdev_op_close = vdev_indirect_close,
1869-
.vdev_op_asize = vdev_default_asize,
1869+
.vdev_op_psize_to_asize = vdev_default_asize,
1870+
.vdev_op_asize_to_psize = vdev_default_psize,
18701871
.vdev_op_min_asize = vdev_default_min_asize,
18711872
.vdev_op_min_alloc = NULL,
18721873
.vdev_op_io_start = vdev_indirect_io_start,

module/zfs/vdev_mirror.c

+6-3
Original file line numberDiff line numberDiff line change
@@ -971,7 +971,8 @@ vdev_ops_t vdev_mirror_ops = {
971971
.vdev_op_fini = NULL,
972972
.vdev_op_open = vdev_mirror_open,
973973
.vdev_op_close = vdev_mirror_close,
974-
.vdev_op_asize = vdev_default_asize,
974+
.vdev_op_psize_to_asize = vdev_default_asize,
975+
.vdev_op_asize_to_psize = vdev_default_psize,
975976
.vdev_op_min_asize = vdev_default_min_asize,
976977
.vdev_op_min_alloc = NULL,
977978
.vdev_op_io_start = vdev_mirror_io_start,
@@ -996,7 +997,8 @@ vdev_ops_t vdev_replacing_ops = {
996997
.vdev_op_fini = NULL,
997998
.vdev_op_open = vdev_mirror_open,
998999
.vdev_op_close = vdev_mirror_close,
999-
.vdev_op_asize = vdev_default_asize,
1000+
.vdev_op_psize_to_asize = vdev_default_asize,
1001+
.vdev_op_asize_to_psize = vdev_default_psize,
10001002
.vdev_op_min_asize = vdev_default_min_asize,
10011003
.vdev_op_min_alloc = NULL,
10021004
.vdev_op_io_start = vdev_mirror_io_start,
@@ -1021,7 +1023,8 @@ vdev_ops_t vdev_spare_ops = {
10211023
.vdev_op_fini = NULL,
10221024
.vdev_op_open = vdev_mirror_open,
10231025
.vdev_op_close = vdev_mirror_close,
1024-
.vdev_op_asize = vdev_default_asize,
1026+
.vdev_op_psize_to_asize = vdev_default_asize,
1027+
.vdev_op_asize_to_psize = vdev_default_psize,
10251028
.vdev_op_min_asize = vdev_default_min_asize,
10261029
.vdev_op_min_alloc = NULL,
10271030
.vdev_op_io_start = vdev_mirror_io_start,

0 commit comments

Comments
 (0)