io_uring: make io_kiocb_to_cmd() typesafe
[linux-block.git] / io_uring / uring_cmd.c
index 0a421ed51e7e168c1258efe3de46a4b084fa2b2f..478e86a9dfaf184f8bc5f2bc1b3f75d500b3bc86 100644 (file)
@@ -11,7 +11,7 @@
 
 static void io_uring_cmd_work(struct io_kiocb *req, bool *locked)
 {
-       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req);
+       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
 
        ioucmd->task_work_cb(ioucmd);
 }
@@ -46,7 +46,7 @@ void io_uring_cmd_done(struct io_uring_cmd *ioucmd, ssize_t ret, ssize_t res2)
        if (ret < 0)
                req_set_fail(req);
 
-       io_req_set_res(req, 0, ret);
+       io_req_set_res(req, ret, 0);
        if (req->ctx->flags & IORING_SETUP_CQE32)
                io_req_set_cqe32_extra(req, res2, 0);
        __io_req_complete(req, 0);
@@ -55,7 +55,7 @@ EXPORT_SYMBOL_GPL(io_uring_cmd_done);
 
 int io_uring_cmd_prep_async(struct io_kiocb *req)
 {
-       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req);
+       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
        size_t cmd_size;
 
        cmd_size = uring_cmd_pdu_size(req->ctx->flags & IORING_SETUP_SQE128);
@@ -66,7 +66,7 @@ int io_uring_cmd_prep_async(struct io_kiocb *req)
 
 int io_uring_cmd_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 {
-       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req);
+       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
 
        if (sqe->rw_flags || sqe->__pad1)
                return -EINVAL;
@@ -77,7 +77,7 @@ int io_uring_cmd_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)
 
 int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
 {
-       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req);
+       struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
        struct io_ring_ctx *ctx = req->ctx;
        struct file *file = req->file;
        int ret;
@@ -106,7 +106,9 @@ int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
        }
 
        if (ret != -EIOCBQUEUED) {
-               io_uring_cmd_done(ioucmd, ret, 0);
+               if (ret < 0)
+                       req_set_fail(req);
+               io_req_set_res(req, ret, 0);
                return IOU_OK;
        }