diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index ce4971138..50c08fffa 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -4707,20 +4707,18 @@ spdk_bdev_is_dif_check_enabled(const struct spdk_bdev *bdev, uint32_t spdk_bdev_get_max_copy(const struct spdk_bdev *bdev) { - uint64_t alighed_length; + uint64_t aligned_length; uint64_t max_copy_blocks; - uint64_t temp_max_copy_blocks; struct spdk_iobuf_opts opts; if (spdk_bdev_io_type_supported((struct spdk_bdev *)bdev, SPDK_BDEV_IO_TYPE_COPY)) { return bdev->max_copy; } else { spdk_iobuf_get_opts(&opts); - alighed_length = opts.large_bufsize - spdk_bdev_get_buf_align(bdev); - temp_max_copy_blocks = spdk_bdev_is_md_separate(bdev) ? - alighed_length / (bdev->blocklen + bdev->md_len) : - alighed_length / bdev->blocklen; - max_copy_blocks = 1 << spdk_u64log2(temp_max_copy_blocks); + aligned_length = opts.large_bufsize - (spdk_bdev_get_buf_align(bdev) - 1); + max_copy_blocks = aligned_length / _bdev_get_block_size_with_md(bdev); + max_copy_blocks -= max_copy_blocks % bdev->write_unit_size; + return max_copy_blocks; } }