io_uring_cmd_complete_in_task(ioucmd, nvme_uring_task_cb);
}
-static void nvme_setup_uring_cmd_data(struct request *rq,
- struct io_uring_cmd *ioucmd, void __user *meta_buffer,
- u32 meta_len, void *meta)
-{
- struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd);
-
- /* to free bio on completion, as req->bio will be null at that time */
- pdu->bio = rq->bio;
- pdu->meta = meta;
- pdu->meta_buffer = meta_buffer;
- pdu->meta_len = meta_len;
- rq->end_io_data = ioucmd;
-}
-
static int nvme_uring_cmd_io(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
struct io_uring_cmd *ioucmd, unsigned int issue_flags)
{
+ struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd);
const struct nvme_uring_cmd *cmd = ioucmd->cmd;
struct request_queue *q = ns ? ns->queue : ctrl->admin_q;
struct nvme_uring_data d;
blk_flags);
if (IS_ERR(req))
return PTR_ERR(req);
+ req->end_io_data = ioucmd;
+
+ /* to free bio on completion, as req->bio will be null at that time */
+ pdu->bio = req->bio;
+ pdu->meta = meta;
+ pdu->meta_buffer = nvme_to_user_ptr(d.metadata);
+ pdu->meta_len = d.metadata_len;
- nvme_setup_uring_cmd_data(req, ioucmd, nvme_to_user_ptr(d.metadata),
- d.metadata_len, meta);
blk_execute_rq_nowait(req, 0, nvme_uring_cmd_end_io);
return -EIOCBQUEUED;
}