bdev/part: Consolidate all I/O types into bdev_part_complete_io()

The following patches will allow the caller to specify a custom
completion callback to spdk_bdev_part_submit_request(). To do it
easily, consolidate completions of all I/O types into
bdev_part_complete_io().

Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I083695189daa7e5271787c50947e428d01a83677
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15001
Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Krzysztof Karas <krzysztof.karas@intel.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Shuhei Matsumoto 2022-10-14 20:45:27 +09:00 committed by Tomasz Zawadzki
parent 02e1823a38
commit 6a5ecb3276

View File

@ -234,20 +234,30 @@ bdev_part_remap_dif(struct spdk_bdev_io *bdev_io, uint32_t offset,
} }
static void static void
bdev_part_complete_read_io(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg) bdev_part_complete_io(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
{ {
struct spdk_bdev_io *part_io = cb_arg; struct spdk_bdev_io *part_io = cb_arg;
uint32_t offset, remapped_offset; uint32_t offset, remapped_offset;
int rc, status; int rc, status;
offset = bdev_io->u.bdev.offset_blocks; switch (bdev_io->type) {
remapped_offset = part_io->u.bdev.offset_blocks; case SPDK_BDEV_IO_TYPE_READ:
if (success) {
offset = bdev_io->u.bdev.offset_blocks;
remapped_offset = part_io->u.bdev.offset_blocks;
if (success) { rc = bdev_part_remap_dif(bdev_io, offset, remapped_offset);
rc = bdev_part_remap_dif(bdev_io, offset, remapped_offset); if (rc != 0) {
if (rc != 0) { success = false;
success = false; }
} }
break;
case SPDK_BDEV_IO_TYPE_ZCOPY:
spdk_bdev_io_set_buf(part_io, bdev_io->u.bdev.iovs[0].iov_base,
bdev_io->u.bdev.iovs[0].iov_len);
break;
default:
break;
} }
status = success ? SPDK_BDEV_IO_STATUS_SUCCESS : SPDK_BDEV_IO_STATUS_FAILED; status = success ? SPDK_BDEV_IO_STATUS_SUCCESS : SPDK_BDEV_IO_STATUS_FAILED;
@ -256,27 +266,6 @@ bdev_part_complete_read_io(struct spdk_bdev_io *bdev_io, bool success, void *cb_
spdk_bdev_free_io(bdev_io); spdk_bdev_free_io(bdev_io);
} }
static void
bdev_part_complete_io(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
{
struct spdk_bdev_io *part_io = cb_arg;
int status = success ? SPDK_BDEV_IO_STATUS_SUCCESS : SPDK_BDEV_IO_STATUS_FAILED;
spdk_bdev_io_complete(part_io, status);
spdk_bdev_free_io(bdev_io);
}
static void
bdev_part_complete_zcopy_io(struct spdk_bdev_io *bdev_io, bool success, void *cb_arg)
{
struct spdk_bdev_io *part_io = cb_arg;
int status = success ? SPDK_BDEV_IO_STATUS_SUCCESS : SPDK_BDEV_IO_STATUS_FAILED;
spdk_bdev_io_set_buf(part_io, bdev_io->u.bdev.iovs[0].iov_base, bdev_io->u.bdev.iovs[0].iov_len);
spdk_bdev_io_complete(part_io, status);
spdk_bdev_free_io(bdev_io);
}
int int
spdk_bdev_part_submit_request(struct spdk_bdev_part_channel *ch, struct spdk_bdev_io *bdev_io) spdk_bdev_part_submit_request(struct spdk_bdev_part_channel *ch, struct spdk_bdev_io *bdev_io)
{ {
@ -296,7 +285,7 @@ spdk_bdev_part_submit_request(struct spdk_bdev_part_channel *ch, struct spdk_bde
rc = spdk_bdev_readv_blocks_ext(base_desc, base_ch, bdev_io->u.bdev.iovs, rc = spdk_bdev_readv_blocks_ext(base_desc, base_ch, bdev_io->u.bdev.iovs,
bdev_io->u.bdev.iovcnt, remapped_offset, bdev_io->u.bdev.iovcnt, remapped_offset,
bdev_io->u.bdev.num_blocks, bdev_io->u.bdev.num_blocks,
bdev_part_complete_read_io, bdev_io, bdev_part_complete_io, bdev_io,
bdev_io->u.bdev.ext_opts); bdev_io->u.bdev.ext_opts);
} else { } else {
rc = spdk_bdev_readv_blocks_with_md(base_desc, base_ch, rc = spdk_bdev_readv_blocks_with_md(base_desc, base_ch,
@ -304,7 +293,7 @@ spdk_bdev_part_submit_request(struct spdk_bdev_part_channel *ch, struct spdk_bde
bdev_io->u.bdev.iovcnt, bdev_io->u.bdev.iovcnt,
bdev_io->u.bdev.md_buf, remapped_offset, bdev_io->u.bdev.md_buf, remapped_offset,
bdev_io->u.bdev.num_blocks, bdev_io->u.bdev.num_blocks,
bdev_part_complete_read_io, bdev_io); bdev_part_complete_io, bdev_io);
} }
break; break;
case SPDK_BDEV_IO_TYPE_WRITE: case SPDK_BDEV_IO_TYPE_WRITE:
@ -350,7 +339,7 @@ spdk_bdev_part_submit_request(struct spdk_bdev_part_channel *ch, struct spdk_bde
case SPDK_BDEV_IO_TYPE_ZCOPY: case SPDK_BDEV_IO_TYPE_ZCOPY:
rc = spdk_bdev_zcopy_start(base_desc, base_ch, NULL, 0, remapped_offset, rc = spdk_bdev_zcopy_start(base_desc, base_ch, NULL, 0, remapped_offset,
bdev_io->u.bdev.num_blocks, bdev_io->u.bdev.zcopy.populate, bdev_io->u.bdev.num_blocks, bdev_io->u.bdev.zcopy.populate,
bdev_part_complete_zcopy_io, bdev_io); bdev_part_complete_io, bdev_io);
break; break;
case SPDK_BDEV_IO_TYPE_COMPARE: case SPDK_BDEV_IO_TYPE_COMPARE:
if (!bdev_io->u.bdev.md_buf) { if (!bdev_io->u.bdev.md_buf) {