]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
io_uring: abstract out io_async_cancel_one() helper
authorJens Axboe <axboe@kernel.dk>
Tue, 5 Nov 2019 19:39:45 +0000 (12:39 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 7 Nov 2019 19:31:31 +0000 (12:31 -0700)
We're going to need this helper in a future patch, so move it out
of io_async_cancel() and into its own separate function.

No functional changes in this patch.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index ee33c7020828df309a28270840eba7b5974f8e3f..5360c3dd262b9919c7f9ef8552d7d0718fcee0c0 100644 (file)
@@ -2152,21 +2152,11 @@ static bool io_cancel_cb(struct io_wq_work *work, void *data)
        return req->user_data == (unsigned long) data;
 }
 
-static int io_async_cancel(struct io_kiocb *req, const struct io_uring_sqe *sqe,
-                          struct io_kiocb **nxt)
+static int io_async_cancel_one(struct io_ring_ctx *ctx, void *sqe_addr)
 {
-       struct io_ring_ctx *ctx = req->ctx;
        enum io_wq_cancel cancel_ret;
-       void *sqe_addr;
        int ret = 0;
 
-       if (unlikely(ctx->flags & IORING_SETUP_IOPOLL))
-               return -EINVAL;
-       if (sqe->flags || sqe->ioprio || sqe->off || sqe->len ||
-           sqe->cancel_flags)
-               return -EINVAL;
-
-       sqe_addr = (void *) (unsigned long) READ_ONCE(sqe->addr);
        cancel_ret = io_wq_cancel_cb(ctx->io_wq, io_cancel_cb, sqe_addr);
        switch (cancel_ret) {
        case IO_WQ_CANCEL_OK:
@@ -2180,6 +2170,25 @@ static int io_async_cancel(struct io_kiocb *req, const struct io_uring_sqe *sqe,
                break;
        }
 
+       return ret;
+}
+
+static int io_async_cancel(struct io_kiocb *req, const struct io_uring_sqe *sqe,
+                          struct io_kiocb **nxt)
+{
+       struct io_ring_ctx *ctx = req->ctx;
+       void *sqe_addr;
+       int ret;
+
+       if (unlikely(ctx->flags & IORING_SETUP_IOPOLL))
+               return -EINVAL;
+       if (sqe->flags || sqe->ioprio || sqe->off || sqe->len ||
+           sqe->cancel_flags)
+               return -EINVAL;
+
+       sqe_addr = (void *) (unsigned long) READ_ONCE(sqe->addr);
+       ret = io_async_cancel_one(ctx, sqe_addr);
+
        if (ret < 0 && (req->flags & REQ_F_LINK))
                req->flags |= REQ_F_FAIL_LINK;
        io_cqring_add_event(req->ctx, sqe->user_data, ret);