bdev: Factor out queueing IO operation in _spdk_bdev_io_split
This patch factors out that operation into a function and adds error handling to that operation to improve readability slightly. Change-Id: Ic24df0c0a9abbebc38d30fc17779dc5a5f6138a6 Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-on: https://review.gerrithub.io/427026 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com>
This commit is contained in:
parent
9872b99206
commit
9d4708f35e
@ -1076,6 +1076,23 @@ _spdk_bdev_qos_io_submit(struct spdk_bdev_channel *ch)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_spdk_bdev_queue_io_wait_with_cb(struct spdk_bdev_io *bdev_io, spdk_bdev_io_wait_cb cb_fn)
|
||||
{
|
||||
int rc;
|
||||
|
||||
bdev_io->internal.waitq_entry.bdev = bdev_io->bdev;
|
||||
bdev_io->internal.waitq_entry.cb_fn = cb_fn;
|
||||
bdev_io->internal.waitq_entry.cb_arg = bdev_io;
|
||||
rc = spdk_bdev_queue_io_wait(bdev_io->bdev, spdk_io_channel_from_ctx(bdev_io->internal.ch),
|
||||
&bdev_io->internal.waitq_entry);
|
||||
if (rc != 0) {
|
||||
SPDK_ERRLOG("Queue IO failed, rc=%d\n", rc);
|
||||
bdev_io->internal.status = SPDK_BDEV_IO_STATUS_FAILED;
|
||||
bdev_io->internal.cb(bdev_io, false, bdev_io->internal.caller_ctx);
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
_spdk_bdev_io_type_can_split(uint8_t type)
|
||||
{
|
||||
@ -1206,11 +1223,7 @@ _spdk_bdev_io_split_with_payload(void *_bdev_io)
|
||||
bdev_io->u.bdev.split_current_offset_blocks += to_next_boundary;
|
||||
bdev_io->u.bdev.split_remaining_num_blocks -= to_next_boundary;
|
||||
} else if (rc == -ENOMEM) {
|
||||
bdev_io->internal.waitq_entry.bdev = bdev_io->bdev;
|
||||
bdev_io->internal.waitq_entry.cb_fn = _spdk_bdev_io_split_with_payload;
|
||||
bdev_io->internal.waitq_entry.cb_arg = bdev_io;
|
||||
spdk_bdev_queue_io_wait(bdev_io->bdev, spdk_io_channel_from_ctx(bdev_io->internal.ch),
|
||||
&bdev_io->internal.waitq_entry);
|
||||
_spdk_bdev_queue_io_wait_with_cb(bdev_io, _spdk_bdev_io_split_with_payload);
|
||||
} else {
|
||||
bdev_io->internal.status = SPDK_BDEV_IO_STATUS_FAILED;
|
||||
bdev_io->internal.cb(bdev_io, false, bdev_io->internal.caller_ctx);
|
||||
|
Loading…
Reference in New Issue
Block a user