mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-10 07:10:27 +00:00
io_uring: run next sqe inline if possible
One major use case of linked commands is the ability to run the next link inline, if at all possible. This is done correctly for async offload, but somewhere along the line we lost the ability to do so when we were able to complete a request without having to punt it. Ensure that we do so correctly. Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
392edb45b2
commit
4a0a7a1874
@ -3224,13 +3224,14 @@ static struct io_kiocb *io_prep_linked_timeout(struct io_kiocb *req)
|
||||
|
||||
static void __io_queue_sqe(struct io_kiocb *req)
|
||||
{
|
||||
struct io_kiocb *linked_timeout = io_prep_linked_timeout(req);
|
||||
struct io_kiocb *linked_timeout;
|
||||
struct io_kiocb *nxt = NULL;
|
||||
int ret;
|
||||
|
||||
again:
|
||||
linked_timeout = io_prep_linked_timeout(req);
|
||||
|
||||
ret = io_issue_sqe(req, &nxt, true);
|
||||
if (nxt)
|
||||
io_queue_async_work(nxt);
|
||||
|
||||
/*
|
||||
* We async punt it if the file wasn't marked NOWAIT, or if the file
|
||||
@ -3249,7 +3250,7 @@ static void __io_queue_sqe(struct io_kiocb *req)
|
||||
* submit reference when the iocb is actually submitted.
|
||||
*/
|
||||
io_queue_async_work(req);
|
||||
return;
|
||||
goto done_req;
|
||||
}
|
||||
|
||||
err:
|
||||
@ -3269,6 +3270,12 @@ err:
|
||||
req_set_fail_links(req);
|
||||
io_put_req(req);
|
||||
}
|
||||
done_req:
|
||||
if (nxt) {
|
||||
req = nxt;
|
||||
nxt = NULL;
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
||||
static void io_queue_sqe(struct io_kiocb *req)
|
||||
|
Loading…
x
Reference in New Issue
Block a user