Skip to content

Commit 4e0d622

Browse files
committed
bdev: fix max_rw_size calculation
max write size calculation need to account aligned length and the blocklen with metadata as done via bdev_get_max_write. This otherwise fails during bdev_io_get_buf for bounce buffer where max length returned by bdev_io_get_max_buf_len breaches the iobuf_large length. Change-Id: I0e2ee2cfa80f0617f8b1379315b9dba2459d2c71 Signed-off-by: Diwakar Sharma <diwakar.sharma@datacore.com>
1 parent 5ad4b3f commit 4e0d622

File tree

1 file changed

+6
-6
lines changed

1 file changed

+6
-6
lines changed

lib/bdev/bdev.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7795,17 +7795,17 @@ bdev_register(struct spdk_bdev *bdev)
77957795
}
77967796
}
77977797

7798-
spdk_iobuf_get_opts(&iobuf_opts, sizeof(iobuf_opts));
7799-
if (spdk_bdev_get_buf_align(bdev) > 1) {
7800-
bdev->max_rw_size = spdk_min(bdev->max_rw_size ? bdev->max_rw_size : UINT32_MAX,
7801-
iobuf_opts.large_bufsize / bdev->blocklen);
7802-
}
7803-
78047798
/* If the user didn't specify a write unit size, set it to one. */
78057799
if (bdev->write_unit_size == 0) {
78067800
bdev->write_unit_size = 1;
78077801
}
78087802

7803+
spdk_iobuf_get_opts(&iobuf_opts, sizeof(iobuf_opts));
7804+
if (spdk_bdev_get_buf_align(bdev) > 1) {
7805+
bdev->max_rw_size = spdk_min(bdev->max_rw_size ? bdev->max_rw_size : UINT32_MAX,
7806+
bdev_get_max_write(bdev, iobuf_opts.large_bufsize));
7807+
}
7808+
78097809
/* Set ACWU value to the write unit size if bdev module did not set it (does not support it natively) */
78107810
if (bdev->acwu == 0) {
78117811
bdev->acwu = bdev->write_unit_size;

0 commit comments

Comments
 (0)