From da744fc9e004654700d641acad28eafecc99b719 Mon Sep 17 00:00:00 2001 From: Jonas Pfefferle Date: Wed, 27 Apr 2022 09:31:43 +0200 Subject: [PATCH] bdev/part: add compare and cmp&write io types The partition bdev checks if the underlying device supports the io type and sends the bdev_io directly down to the bdev. This patch adds missing compare and compare&write io types to the partition bdev. Signed-off-by: Jonas Pfefferle Change-Id: Ice7e5c0332ce7e564bad2bb8d7f4bb1d535388c1 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12390 Community-CI: Broadcom CI Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Tomasz Zawadzki Reviewed-by: Aleksey Marchuk --- lib/bdev/part.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/bdev/part.c b/lib/bdev/part.c index 2141bc85d..7746372eb 100644 --- a/lib/bdev/part.c +++ b/lib/bdev/part.c @@ -380,6 +380,33 @@ spdk_bdev_part_submit_request(struct spdk_bdev_part_channel *ch, struct spdk_bde bdev_io->u.bdev.num_blocks, bdev_io->u.bdev.zcopy.populate, bdev_part_complete_zcopy_io, bdev_io); break; + case SPDK_BDEV_IO_TYPE_COMPARE: + if (!bdev_io->u.bdev.md_buf) { + rc = spdk_bdev_comparev_blocks(base_desc, base_ch, + bdev_io->u.bdev.iovs, + bdev_io->u.bdev.iovcnt, + remapped_offset, + bdev_io->u.bdev.num_blocks, + bdev_part_complete_io, bdev_io); + } else { + rc = spdk_bdev_comparev_blocks_with_md(base_desc, base_ch, + bdev_io->u.bdev.iovs, + bdev_io->u.bdev.iovcnt, + bdev_io->u.bdev.md_buf, + remapped_offset, + bdev_io->u.bdev.num_blocks, + bdev_part_complete_io, bdev_io); + } + break; + case SPDK_BDEV_IO_TYPE_COMPARE_AND_WRITE: + rc = spdk_bdev_comparev_and_writev_blocks(base_desc, base_ch, bdev_io->u.bdev.iovs, + bdev_io->u.bdev.iovcnt, + bdev_io->u.bdev.fused_iovs, + bdev_io->u.bdev.fused_iovcnt, + remapped_offset, + bdev_io->u.bdev.num_blocks, + bdev_part_complete_io, bdev_io); + break; default: SPDK_ERRLOG("unknown I/O type %d\n", bdev_io->type); return SPDK_BDEV_IO_STATUS_FAILED;