]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
io_uring/nvme: pass issue_flags to io_uring_cmd_import_fixed()
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 24 Feb 2025 21:31:09 +0000 (13:31 -0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 27 Feb 2025 14:17:39 +0000 (07:17 -0700)
io_uring_cmd_import_fixed() will need to know the io_uring execution
state in following commits, for now just pass issue_flags into it
without actually using.

Reviewed-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250224213116.3509093-5-kbusch@meta.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/nvme/host/ioctl.c
include/linux/io_uring/cmd.h
io_uring/uring_cmd.c

index e8930146847af487a8f6f0ba1c0d2c70e32ec0a5..e0876bc9aacde43f8625c1d015c2bfb7b52a26c0 100644 (file)
@@ -114,7 +114,8 @@ static struct request *nvme_alloc_user_request(struct request_queue *q,
 
 static int nvme_map_user_request(struct request *req, u64 ubuffer,
                unsigned bufflen, void __user *meta_buffer, unsigned meta_len,
-               struct io_uring_cmd *ioucmd, unsigned int flags)
+               struct io_uring_cmd *ioucmd, unsigned int flags,
+               unsigned int iou_issue_flags)
 {
        struct request_queue *q = req->q;
        struct nvme_ns *ns = q->queuedata;
@@ -142,7 +143,8 @@ static int nvme_map_user_request(struct request *req, u64 ubuffer,
                if (WARN_ON_ONCE(flags & NVME_IOCTL_VEC))
                        return -EINVAL;
                ret = io_uring_cmd_import_fixed(ubuffer, bufflen,
-                               rq_data_dir(req), &iter, ioucmd);
+                               rq_data_dir(req), &iter, ioucmd,
+                               iou_issue_flags);
                if (ret < 0)
                        goto out;
                ret = blk_rq_map_user_iov(q, req, NULL, &iter, GFP_KERNEL);
@@ -194,7 +196,7 @@ static int nvme_submit_user_cmd(struct request_queue *q,
        req->timeout = timeout;
        if (ubuffer && bufflen) {
                ret = nvme_map_user_request(req, ubuffer, bufflen, meta_buffer,
-                               meta_len, NULL, flags);
+                               meta_len, NULL, flags, 0);
                if (ret)
                        return ret;
        }
@@ -514,7 +516,7 @@ static int nvme_uring_cmd_io(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
        if (d.addr && d.data_len) {
                ret = nvme_map_user_request(req, d.addr,
                        d.data_len, nvme_to_user_ptr(d.metadata),
-                       d.metadata_len, ioucmd, vec);
+                       d.metadata_len, ioucmd, vec, issue_flags);
                if (ret)
                        return ret;
        }
index abd0c8bd950ba5083c2bccd9415dd5cede2a8565..87150dc0a07cf00e40367f653dc2fb3a1b6a67cf 100644 (file)
@@ -39,7 +39,8 @@ static inline void io_uring_cmd_private_sz_check(size_t cmd_sz)
 
 #if defined(CONFIG_IO_URING)
 int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
-                             struct iov_iter *iter, void *ioucmd);
+                             struct iov_iter *iter, void *ioucmd,
+                             unsigned int issue_flags);
 
 /*
  * Completes the request, i.e. posts an io_uring CQE and deallocates @ioucmd
@@ -67,7 +68,8 @@ void io_uring_cmd_issue_blocking(struct io_uring_cmd *ioucmd);
 
 #else
 static inline int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
-                             struct iov_iter *iter, void *ioucmd)
+                             struct iov_iter *iter, void *ioucmd,
+                             unsigned int issue_flags)
 {
        return -EOPNOTSUPP;
 }
index 14086a266461136172a7999fa041bcfd2e9b7c4a..28ed69c40756e6cadbec24130cf7cba18100c5ef 100644 (file)
@@ -257,7 +257,8 @@ int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
 }
 
 int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
-                             struct iov_iter *iter, void *ioucmd)
+                             struct iov_iter *iter, void *ioucmd,
+                             unsigned int issue_flags)
 {
        struct io_kiocb *req = cmd_to_io_kiocb(ioucmd);
        struct io_rsrc_node *node = req->buf_node;