diff options
author | Jens Axboe <axboe@kernel.dk> | 2020-06-22 09:29:15 -0600 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-06-25 07:22:50 -0600 |
commit | 013538bd65fd3cdbf3ca8b0c99b962c70473c803 (patch) | |
tree | a9ea3bd2e00ef6cdc13ee8ce5b409c3958347f0f /fs/io_uring.c | |
parent | e1e16097e265daac918ce355bf1a0d1677adf0c7 (diff) | |
download | lwn-013538bd65fd3cdbf3ca8b0c99b962c70473c803.tar.gz lwn-013538bd65fd3cdbf3ca8b0c99b962c70473c803.zip |
io_uring: add 'io_comp_state' to struct io_submit_state
No functional changes in this patch, just in preparation for passing back
pending completions to the caller and completing them in a batched
fashion.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r-- | fs/io_uring.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c index 17d7bafaf8cf..002ab5eae20f 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -678,6 +678,12 @@ struct io_kiocb { #define IO_IOPOLL_BATCH 8 +struct io_comp_state { + unsigned int nr; + struct list_head list; + struct io_ring_ctx *ctx; +}; + struct io_submit_state { struct blk_plug plug; @@ -688,6 +694,11 @@ struct io_submit_state { unsigned int free_reqs; /* + * Batch completion logic + */ + struct io_comp_state comp; + + /* * File reference cache */ struct file *file; @@ -6006,12 +6017,15 @@ static void io_submit_state_end(struct io_submit_state *state) * Start submission side cache. */ static void io_submit_state_start(struct io_submit_state *state, - unsigned int max_ios) + struct io_ring_ctx *ctx, unsigned int max_ios) { blk_start_plug(&state->plug); #ifdef CONFIG_BLOCK state->plug.nowait = true; #endif + state->comp.nr = 0; + INIT_LIST_HEAD(&state->comp.list); + state->comp.ctx = ctx; state->free_reqs = 0; state->file = NULL; state->ios_left = max_ios; @@ -6146,7 +6160,7 @@ static int io_submit_sqes(struct io_ring_ctx *ctx, unsigned int nr, if (!percpu_ref_tryget_many(&ctx->refs, nr)) return -EAGAIN; - io_submit_state_start(&state, nr); + io_submit_state_start(&state, ctx, nr); ctx->ring_fd = ring_fd; ctx->ring_file = ring_file; |