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:
parent
02e1823a38
commit
6a5ecb3276
@ -234,21 +234,31 @@ bdev_part_remap_dif(struct spdk_bdev_io *bdev_io, uint32_t offset,
|
||||
}
|
||||
|
||||
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;
|
||||
uint32_t offset, remapped_offset;
|
||||
int rc, status;
|
||||
|
||||
switch (bdev_io->type) {
|
||||
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);
|
||||
if (rc != 0) {
|
||||
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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
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
|
||||
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,
|
||||
bdev_io->u.bdev.iovcnt, remapped_offset,
|
||||
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);
|
||||
} else {
|
||||
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.md_buf, remapped_offset,
|
||||
bdev_io->u.bdev.num_blocks,
|
||||
bdev_part_complete_read_io, bdev_io);
|
||||
bdev_part_complete_io, bdev_io);
|
||||
}
|
||||
break;
|
||||
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:
|
||||
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_part_complete_zcopy_io, bdev_io);
|
||||
bdev_part_complete_io, bdev_io);
|
||||
break;
|
||||
case SPDK_BDEV_IO_TYPE_COMPARE:
|
||||
if (!bdev_io->u.bdev.md_buf) {
|
||||
|
Loading…
Reference in New Issue
Block a user