summaryrefslogtreecommitdiff
path: root/drivers/nvme/host
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2026-09-28 11:51:00 -0600
committerJens Axboe <axboe@kernel.dk>2026-09-28 11:51:00 -0600
commit3769bc31a5b79ec406df085592fd9dc14ce7df12 (patch)
tree6f3cf19e02912c81e046a119cf9286e1ff1f8bd5 /drivers/nvme/host
parent358b1c4d39ce5f699fb8fefaf0ae77a3ccd1debb (diff)
parent13d3783a55b758a9fa05b67835afa7e216476c61 (diff)
downloadlinux-next-3769bc31a5b79ec406df085592fd9dc14ce7df12.tar.gz
linux-next-3769bc31a5b79ec406df085592fd9dc14ce7df12.zip
Merge branch 'for-7.4/io_uring' into for-next
* for-7.4/io_uring: io_uring: wait for in-flight requests on ring release io_uring: drop registered files and buffers at release time io_uring: run cancelations synchronously on ring release io_uring/cancel: cancel and wait for all requests on process exit io_uring/notif: count pending zerocopy notifications per ring io_uring/uring_cmd: only cancel requests of the given task io_uring: put request files before posting the completions io_uring/rw: don't reap io-wq IOPOLL completions while io-wq has a reference io_uring: post io-wq completions from the last request reference io_uring/io-wq: put the request file before posting a completion io_uring/io-wq: release raw spinlock before calling wake_up() io_uring/rsrc: fix accounting for cloned buffers with huge pages io_uring: check for room before posting the dummy skip CQE io_uring/fdinfo: ignore IORING_CQE_F_32 in last CQ array slot nvme/ioctl: call io_uring_cmd_set_res32() in ->end_io() io_uring/cmd: split io_uring_cmd_set_res() from io_uring_cmd_done() io_uring: move req_set_*() to public header
Diffstat (limited to 'drivers/nvme/host')
-rw-r--r--drivers/nvme/host/ioctl.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c
index 6539d4750098..3aa5d2f2dfbb 100644
--- a/drivers/nvme/host/ioctl.c
+++ b/drivers/nvme/host/ioctl.c
@@ -423,8 +423,6 @@ struct nvme_uring_data {
struct nvme_uring_cmd_pdu {
struct request *req;
struct bio *bio;
- u64 result;
- int status;
};
static inline struct nvme_uring_cmd_pdu *nvme_uring_cmd_pdu(
@@ -440,8 +438,7 @@ static void nvme_uring_task_cb(struct io_tw_req tw_req, io_tw_token_t tw)
if (pdu->bio)
blk_rq_unmap_user(pdu->bio);
- io_uring_cmd_done32(ioucmd, pdu->status, pdu->result,
- IO_URING_CMD_TASK_WORK_ISSUE_FLAGS);
+ __io_uring_cmd_done(ioucmd, IO_URING_CMD_TASK_WORK_ISSUE_FLAGS);
}
static enum rq_end_io_ret nvme_uring_cmd_end_io(struct request *req,
@@ -450,15 +447,17 @@ static enum rq_end_io_ret nvme_uring_cmd_end_io(struct request *req,
{
struct io_uring_cmd *ioucmd = req->end_io_data;
struct nvme_uring_cmd_pdu *pdu = nvme_uring_cmd_pdu(ioucmd);
+ u64 result = le64_to_cpu(nvme_req(req)->result.u64);
+ int status;
if (nvme_req(req)->flags & NVME_REQ_CANCELLED) {
- pdu->status = -EINTR;
+ status = -EINTR;
} else {
- pdu->status = nvme_req(req)->status;
- if (!pdu->status)
- pdu->status = blk_status_to_errno(err);
+ status = nvme_req(req)->status;
+ if (!status)
+ status = blk_status_to_errno(err);
}
- pdu->result = le64_to_cpu(nvme_req(req)->result.u64);
+ io_uring_cmd_set_res32(ioucmd, status, result);
/*
* For IOPOLL, check if this completion is happening in the context
@@ -471,7 +470,7 @@ static enum rq_end_io_ret nvme_uring_cmd_end_io(struct request *req,
iob->poll_ctx == io_uring_cmd_ctx_handle(ioucmd)) {
if (pdu->bio)
blk_rq_unmap_user(pdu->bio);
- io_uring_cmd_done32(ioucmd, pdu->status, pdu->result, 0);
+ __io_uring_cmd_done(ioucmd, 0);
} else {
io_uring_cmd_do_in_task_lazy(ioucmd, nvme_uring_task_cb);
}