io_uring: reuse io_req_task_complete for timeouts
authorPavel Begunkov <asml.silence@gmail.com>
Sun, 5 Dec 2021 14:38:00 +0000 (14:38 +0000)
committerJens Axboe <axboe@kernel.dk>
Sun, 5 Dec 2021 15:56:24 +0000 (08:56 -0700)
With kbuf unification io_req_task_complete() is now a generic function,
use it for timeout's tw completions.

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

index ea7a0da..1265dc1 100644 (file)
@@ -5953,15 +5953,6 @@ err:
        return 0;
 }
 
-static void io_req_task_timeout(struct io_kiocb *req, bool *locked)
-{
-       struct io_timeout_data *data = req->async_data;
-
-       if (!(data->flags & IORING_TIMEOUT_ETIME_SUCCESS))
-               req_set_fail(req);
-       io_req_complete_post(req, -ETIME, 0);
-}
-
 static enum hrtimer_restart io_timeout_fn(struct hrtimer *timer)
 {
        struct io_timeout_data *data = container_of(timer,
@@ -5976,7 +5967,11 @@ static enum hrtimer_restart io_timeout_fn(struct hrtimer *timer)
                atomic_read(&req->ctx->cq_timeouts) + 1);
        spin_unlock_irqrestore(&ctx->timeout_lock, flags);
 
-       req->io_task_work.func = io_req_task_timeout;
+       if (!(data->flags & IORING_TIMEOUT_ETIME_SUCCESS))
+               req_set_fail(req);
+
+       req->result = -ETIME;
+       req->io_task_work.func = io_req_task_complete;
        io_req_task_work_add(req);
        return HRTIMER_NORESTART;
 }