OSDN Git Service

io_uring: remove ctx referencing from complete_post
authorPavel Begunkov <asml.silence@gmail.com>
Wed, 15 Sep 2021 11:04:20 +0000 (12:04 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 19 Oct 2021 11:49:53 +0000 (05:49 -0600)
Now completions are done from task context, that means that it's either
the task itself, task_work or io-wq worker. In all those cases the ctx
will be staying alive by mutexing, explicit referencing or req references
by iowq. Remove extra ctx pinning from io_req_complete_post().

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/60a0e96434c16ab4fe587651448290d61ec9a113.1631703756.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 323ef0b..027ca7a 100644 (file)
@@ -1809,17 +1809,11 @@ static void io_req_complete_post(struct io_kiocb *req, long res,
                io_put_task(req->task, 1);
                list_add(&req->inflight_entry, &ctx->locked_free_list);
                ctx->locked_free_nr++;
-       } else {
-               if (!percpu_ref_tryget(&ctx->refs))
-                       req = NULL;
+               percpu_ref_put(&ctx->refs);
        }
        io_commit_cqring(ctx);
        spin_unlock(&ctx->completion_lock);
-
-       if (req) {
-               io_cqring_ev_posted(ctx);
-               percpu_ref_put(&ctx->refs);
-       }
+       io_cqring_ev_posted(ctx);
 }
 
 static inline bool io_req_needs_clean(struct io_kiocb *req)