bdev/uring: handle the out of resoruce from uring
To fix issue: #2775 Change-Id: I57172ba58419be56702157931d7a617c2e959041 Signed-off-by: GangCao <gang.cao@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15424 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Xiaodong Liu <xiaodong.liu@intel.com> Reviewed-by: wanghailiang <hailiangx.e.wang@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
This commit is contained in:
parent
8dc878483d
commit
969df28bdb
@ -132,6 +132,11 @@ bdev_uring_readv(struct bdev_uring *uring, struct spdk_io_channel *ch,
|
||||
struct io_uring_sqe *sqe;
|
||||
|
||||
sqe = io_uring_get_sqe(&group_ch->uring);
|
||||
if (!sqe) {
|
||||
SPDK_DEBUGLOG(uring, "get sqe failed as out of resource\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
io_uring_prep_readv(sqe, uring->fd, iov, iovcnt, offset);
|
||||
io_uring_sqe_set_data(sqe, uring_task);
|
||||
uring_task->len = nbytes;
|
||||
@ -154,6 +159,11 @@ bdev_uring_writev(struct bdev_uring *uring, struct spdk_io_channel *ch,
|
||||
struct io_uring_sqe *sqe;
|
||||
|
||||
sqe = io_uring_get_sqe(&group_ch->uring);
|
||||
if (!sqe) {
|
||||
SPDK_DEBUGLOG(uring, "get sqe failed as out of resource\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
io_uring_prep_writev(sqe, uring->fd, iov, iovcnt, offset);
|
||||
io_uring_sqe_set_data(sqe, uring_task);
|
||||
uring_task->len = nbytes;
|
||||
@ -255,6 +265,8 @@ static void
|
||||
bdev_uring_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io,
|
||||
bool success)
|
||||
{
|
||||
int64_t ret = 0;
|
||||
|
||||
if (!success) {
|
||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||
return;
|
||||
@ -262,7 +274,7 @@ bdev_uring_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io,
|
||||
|
||||
switch (bdev_io->type) {
|
||||
case SPDK_BDEV_IO_TYPE_READ:
|
||||
bdev_uring_readv((struct bdev_uring *)bdev_io->bdev->ctxt,
|
||||
ret = bdev_uring_readv((struct bdev_uring *)bdev_io->bdev->ctxt,
|
||||
ch,
|
||||
(struct bdev_uring_task *)bdev_io->driver_ctx,
|
||||
bdev_io->u.bdev.iovs,
|
||||
@ -271,7 +283,7 @@ bdev_uring_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io,
|
||||
bdev_io->u.bdev.offset_blocks * bdev_io->bdev->blocklen);
|
||||
break;
|
||||
case SPDK_BDEV_IO_TYPE_WRITE:
|
||||
bdev_uring_writev((struct bdev_uring *)bdev_io->bdev->ctxt,
|
||||
ret = bdev_uring_writev((struct bdev_uring *)bdev_io->bdev->ctxt,
|
||||
ch,
|
||||
(struct bdev_uring_task *)bdev_io->driver_ctx,
|
||||
bdev_io->u.bdev.iovs,
|
||||
@ -283,6 +295,10 @@ bdev_uring_get_buf_cb(struct spdk_io_channel *ch, struct spdk_bdev_io *bdev_io,
|
||||
SPDK_ERRLOG("Wrong io type\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (ret == -ENOMEM) {
|
||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_NOMEM);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SPDK_CONFIG_URING_ZNS
|
||||
|
Loading…
Reference in New Issue
Block a user