io_uring: partially inline io_iopoll_getevents()
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 7 Jul 2020 13:36:20 +0000 (16:36 +0300)
committerJens Axboe <axboe@kernel.dk>
Tue, 7 Jul 2020 18:00:03 +0000 (12:00 -0600)
io_iopoll_reap_events() doesn't care about returned valued of
io_iopoll_getevents() and does the same checks for list emptiness
and need_resched(). Just use io_do_iopoll().

io_sq_thread() doesn't check return value as well. It also passes min=0,
so there never be the second iteration inside io_poll_getevents().
Inline it there too.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 6e31698..104af67 100644 (file)
@@ -2064,7 +2064,7 @@ static void io_iopoll_reap_events(struct io_ring_ctx *ctx)
        while (!list_empty(&ctx->poll_list)) {
                unsigned int nr_events = 0;
 
-               io_iopoll_getevents(ctx, &nr_events, 1);
+               io_do_iopoll(ctx, &nr_events, 1);
 
                /*
                 * Ensure we allow local-to-the-cpu processing to take place,
@@ -6318,8 +6318,8 @@ static int io_sq_thread(void *data)
                        unsigned nr_events = 0;
 
                        mutex_lock(&ctx->uring_lock);
-                       if (!list_empty(&ctx->poll_list))
-                               io_iopoll_getevents(ctx, &nr_events, 0);
+                       if (!list_empty(&ctx->poll_list) && !need_resched())
+                               io_do_iopoll(ctx, &nr_events, 0);
                        else
                                timeout = jiffies + ctx->sq_thread_idle;
                        mutex_unlock(&ctx->uring_lock);