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,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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user