diff options
| author | Pavel Begunkov <[email protected]> | 2025-03-08 17:19:32 +0000 |
|---|---|---|
| committer | Jens Axboe <[email protected]> | 2025-03-10 13:14:18 +0000 |
| commit | 7a9dcb05f5501b07a2ef7d0ef743f4f17e9f3055 (patch) | |
| tree | da40e494297268af4556eb45d62744bd89988a43 /io_uring/io_uring.c | |
| parent | io_uring: cap cached iovec/bvec size (diff) | |
| download | kernel-7a9dcb05f5501b07a2ef7d0ef743f4f17e9f3055.tar.gz kernel-7a9dcb05f5501b07a2ef7d0ef743f4f17e9f3055.zip | |
io_uring: return -EAGAIN to continue multishot
Multishot errors can be mapped 1:1 to normal errors, but there are not
identical. It leads to a peculiar situation where all multishot requests
has to check in what context they're run and return different codes.
Unify them starting with EAGAIN / IOU_ISSUE_SKIP_COMPLETE(EIOCBQUEUED)
pair, which mean that core io_uring still owns the request and it should
be retried. In case of multishot it's naturally just continues to poll,
otherwise it might poll, use iowq or do any other kind of allowed
blocking. Introduce IOU_RETRY aliased to -EAGAIN for that.
Apart from obvious upsides, multishot can now also check for misuse of
IOU_ISSUE_SKIP_COMPLETE.
Signed-off-by: Pavel Begunkov <[email protected]>
Link: https://lore.kernel.org/r/da117b79ce72ecc3ab488c744e29fae9ba54e23b.1741453534.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <[email protected]>
Diffstat (limited to 'io_uring/io_uring.c')
| -rw-r--r-- | io_uring/io_uring.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index fa342be39158..6499d8e4d3d0 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -1791,10 +1791,8 @@ int io_poll_issue(struct io_kiocb *req, io_tw_token_t tw) ret = __io_issue_sqe(req, issue_flags, &io_issue_defs[req->opcode]); + WARN_ON_ONCE(ret == IOU_ISSUE_SKIP_COMPLETE); WARN_ON_ONCE(ret == IOU_OK); - - if (ret == IOU_ISSUE_SKIP_COMPLETE) - ret = 0; return ret; } |
