aboutsummaryrefslogtreecommitdiffstats
path: root/fs/io_uring.c
diff options
context:
space:
mode:
authorPavel Begunkov <asml.silence@gmail.com>2021-06-17 18:14:05 +0100
committerJens Axboe <axboe@kernel.dk>2021-06-18 09:22:02 -0600
commita3dbdf54da80326fd12bc11ad75ecd699a82374f (patch)
tree5ca8e303a10f0f88f34d4501d9460d18a97b3dcb /fs/io_uring.c
parentio_uring: clean all flags in io_clean_op() at once (diff)
downloadlinux-dev-a3dbdf54da80326fd12bc11ad75ecd699a82374f.tar.xz
linux-dev-a3dbdf54da80326fd12bc11ad75ecd699a82374f.zip
io_uring: refactor io_get_sequence()
Clean up io_get_sequence() and add a comment describing the magic around sequence correction. Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> Link: https://lore.kernel.org/r/f55dc409936b8afa4698d24b8677a34d31077ccb.1623949695.git.asml.silence@gmail.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r--fs/io_uring.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c
index 474705a97f29..c41e9a925fa2 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -5993,13 +5993,12 @@ static int io_req_prep_async(struct io_kiocb *req)
static u32 io_get_sequence(struct io_kiocb *req)
{
- struct io_kiocb *pos;
- struct io_ring_ctx *ctx = req->ctx;
- u32 nr_reqs = 0;
+ u32 seq = req->ctx->cached_sq_head;
- io_for_each_link(pos, req)
- nr_reqs++;
- return ctx->cached_sq_head - nr_reqs;
+ /* need original cached_sq_head, but it was increased for each req */
+ io_for_each_link(req, req)
+ seq--;
+ return seq;
}
static bool io_drain_req(struct io_kiocb *req)