Commit 27a3d248 authored by Yalong Wang's avatar Yalong Wang Committed by Jim Harris
Browse files

bdev: consider write boundary for emulated write zeroes



When write zeroes is not supported natively, we must consider the
bdev's write boundary when determining the max_write_zeroes size.

Change-Id: If35b545b378c6e034eed9b0dee16422b517fa8c2
Signed-off-by: default avatarYalong Wang <yalong9@staff.sina.com.cn>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25802


Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
parent 42ba50e0
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -8216,7 +8216,14 @@ bdev_register(struct spdk_bdev *bdev)
	}

	if (!bdev_io_type_supported(bdev, SPDK_BDEV_IO_TYPE_WRITE_ZEROES)) {
		bdev->max_write_zeroes = bdev_get_max_write(bdev, ZERO_BUFFER_SIZE);
		/* If WRITE_ZEROES is not supported, set max_write_zeroes based on write capability */
		uint32_t zero_buffer_num_blocks = bdev_get_max_write(bdev, ZERO_BUFFER_SIZE);
		uint32_t write_boundary = bdev_rw_get_io_boundary(bdev, SPDK_BDEV_IO_TYPE_WRITE);

		bdev->max_write_zeroes = spdk_min(write_boundary, zero_buffer_num_blocks);
		if (bdev->max_write_zeroes == 0) {
			bdev->max_write_zeroes = zero_buffer_num_blocks;
		}
	}

	bdev->internal.reset_in_progress = NULL;