io_uring: add 'io_comp_state' to struct io_submit_state
authorJens Axboe <axboe@kernel.dk>
Mon, 22 Jun 2020 15:29:15 +0000 (09:29 -0600)
committerJens Axboe <axboe@kernel.dk>
Thu, 25 Jun 2020 13:22:50 +0000 (07:22 -0600)
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>
fs/io_uring.c

index 17d7baf..002ab5e 100644 (file)
@@ -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;