Skip to content

Commit 7b7fdb8

Browse files
author
Christoph Hellwig
committed
nvme: replace the "bool vec" arguments with flags in the ioctl path
To prepare for passing down more information, replace the boolean vec argument with a more extensible flags one. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Keith Busch <kbusch@kernel.org> Reviewed-by: Kanchan Joshi <joshi.k@samsung.com> Reviewed-by: Chaitanya Kulkarni <kch@nvidia.com>
1 parent 2fa1dc8 commit 7b7fdb8

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

drivers/nvme/host/ioctl.c

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
#include <linux/io_uring.h>
99
#include "nvme.h"
1010

11+
enum {
12+
NVME_IOCTL_VEC = (1 << 0),
13+
};
14+
1115
static bool nvme_cmd_allowed(struct nvme_ns *ns, struct nvme_command *c,
1216
fmode_t mode)
1317
{
@@ -150,7 +154,7 @@ static struct request *nvme_alloc_user_request(struct request_queue *q,
150154
static int nvme_map_user_request(struct request *req, u64 ubuffer,
151155
unsigned bufflen, void __user *meta_buffer, unsigned meta_len,
152156
u32 meta_seed, void **metap, struct io_uring_cmd *ioucmd,
153-
bool vec)
157+
unsigned int flags)
154158
{
155159
struct request_queue *q = req->q;
156160
struct nvme_ns *ns = q->queuedata;
@@ -163,7 +167,7 @@ static int nvme_map_user_request(struct request *req, u64 ubuffer,
163167
struct iov_iter iter;
164168

165169
/* fixedbufs is only for non-vectored io */
166-
if (WARN_ON_ONCE(vec))
170+
if (WARN_ON_ONCE(flags & NVME_IOCTL_VEC))
167171
return -EINVAL;
168172
ret = io_uring_cmd_import_fixed(ubuffer, bufflen,
169173
rq_data_dir(req), &iter, ioucmd);
@@ -172,8 +176,8 @@ static int nvme_map_user_request(struct request *req, u64 ubuffer,
172176
ret = blk_rq_map_user_iov(q, req, NULL, &iter, GFP_KERNEL);
173177
} else {
174178
ret = blk_rq_map_user_io(req, NULL, nvme_to_user_ptr(ubuffer),
175-
bufflen, GFP_KERNEL, vec, 0, 0,
176-
rq_data_dir(req));
179+
bufflen, GFP_KERNEL, flags & NVME_IOCTL_VEC, 0,
180+
0, rq_data_dir(req));
177181
}
178182

179183
if (ret)
@@ -203,9 +207,9 @@ static int nvme_map_user_request(struct request *req, u64 ubuffer,
203207
}
204208

205209
static int nvme_submit_user_cmd(struct request_queue *q,
206-
struct nvme_command *cmd, u64 ubuffer,
207-
unsigned bufflen, void __user *meta_buffer, unsigned meta_len,
208-
u32 meta_seed, u64 *result, unsigned timeout, bool vec)
210+
struct nvme_command *cmd, u64 ubuffer, unsigned bufflen,
211+
void __user *meta_buffer, unsigned meta_len, u32 meta_seed,
212+
u64 *result, unsigned timeout, unsigned int flags)
209213
{
210214
struct nvme_ctrl *ctrl;
211215
struct request *req;
@@ -221,7 +225,7 @@ static int nvme_submit_user_cmd(struct request_queue *q,
221225
req->timeout = timeout;
222226
if (ubuffer && bufflen) {
223227
ret = nvme_map_user_request(req, ubuffer, bufflen, meta_buffer,
224-
meta_len, meta_seed, &meta, NULL, vec);
228+
meta_len, meta_seed, &meta, NULL, flags);
225229
if (ret)
226230
return ret;
227231
}
@@ -304,10 +308,8 @@ static int nvme_submit_io(struct nvme_ns *ns, struct nvme_user_io __user *uio)
304308
c.rw.apptag = cpu_to_le16(io.apptag);
305309
c.rw.appmask = cpu_to_le16(io.appmask);
306310

307-
return nvme_submit_user_cmd(ns->queue, &c,
308-
io.addr, length,
309-
metadata, meta_len, lower_32_bits(io.slba), NULL, 0,
310-
false);
311+
return nvme_submit_user_cmd(ns->queue, &c, io.addr, length, metadata,
312+
meta_len, lower_32_bits(io.slba), NULL, 0, 0);
311313
}
312314

313315
static bool nvme_validate_passthru_nsid(struct nvme_ctrl *ctrl,
@@ -360,9 +362,8 @@ static int nvme_user_cmd(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
360362
timeout = msecs_to_jiffies(cmd.timeout_ms);
361363

362364
status = nvme_submit_user_cmd(ns ? ns->queue : ctrl->admin_q, &c,
363-
cmd.addr, cmd.data_len,
364-
nvme_to_user_ptr(cmd.metadata), cmd.metadata_len,
365-
0, &result, timeout, false);
365+
cmd.addr, cmd.data_len, nvme_to_user_ptr(cmd.metadata),
366+
cmd.metadata_len, 0, &result, timeout, 0);
366367

367368
if (status >= 0) {
368369
if (put_user(result, &ucmd->result))
@@ -373,8 +374,8 @@ static int nvme_user_cmd(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
373374
}
374375

375376
static int nvme_user_cmd64(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
376-
struct nvme_passthru_cmd64 __user *ucmd, bool vec,
377-
fmode_t mode)
377+
struct nvme_passthru_cmd64 __user *ucmd, unsigned int flags,
378+
fmode_t mode)
378379
{
379380
struct nvme_passthru_cmd64 cmd;
380381
struct nvme_command c;
@@ -408,9 +409,8 @@ static int nvme_user_cmd64(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
408409
timeout = msecs_to_jiffies(cmd.timeout_ms);
409410

410411
status = nvme_submit_user_cmd(ns ? ns->queue : ctrl->admin_q, &c,
411-
cmd.addr, cmd.data_len,
412-
nvme_to_user_ptr(cmd.metadata), cmd.metadata_len,
413-
0, &cmd.result, timeout, vec);
412+
cmd.addr, cmd.data_len, nvme_to_user_ptr(cmd.metadata),
413+
cmd.metadata_len, 0, &cmd.result, timeout, flags);
414414

415415
if (status >= 0) {
416416
if (put_user(cmd.result, &ucmd->result))
@@ -643,7 +643,7 @@ static int nvme_ctrl_ioctl(struct nvme_ctrl *ctrl, unsigned int cmd,
643643
case NVME_IOCTL_ADMIN_CMD:
644644
return nvme_user_cmd(ctrl, NULL, argp, mode);
645645
case NVME_IOCTL_ADMIN64_CMD:
646-
return nvme_user_cmd64(ctrl, NULL, argp, false, mode);
646+
return nvme_user_cmd64(ctrl, NULL, argp, 0, mode);
647647
default:
648648
return sed_ioctl(ctrl->opal_dev, cmd, argp);
649649
}
@@ -670,6 +670,8 @@ struct nvme_user_io32 {
670670
static int nvme_ns_ioctl(struct nvme_ns *ns, unsigned int cmd,
671671
void __user *argp, fmode_t mode)
672672
{
673+
unsigned int flags = 0;
674+
673675
switch (cmd) {
674676
case NVME_IOCTL_ID:
675677
force_successful_syscall_return();
@@ -686,10 +688,11 @@ static int nvme_ns_ioctl(struct nvme_ns *ns, unsigned int cmd,
686688
#endif
687689
case NVME_IOCTL_SUBMIT_IO:
688690
return nvme_submit_io(ns, argp);
689-
case NVME_IOCTL_IO64_CMD:
690-
return nvme_user_cmd64(ns->ctrl, ns, argp, false, mode);
691691
case NVME_IOCTL_IO64_CMD_VEC:
692-
return nvme_user_cmd64(ns->ctrl, ns, argp, true, mode);
692+
flags |= NVME_IOCTL_VEC;
693+
fallthrough;
694+
case NVME_IOCTL_IO64_CMD:
695+
return nvme_user_cmd64(ns->ctrl, ns, argp, flags, mode);
693696
default:
694697
return -ENOTTY;
695698
}
@@ -962,7 +965,7 @@ long nvme_dev_ioctl(struct file *file, unsigned int cmd,
962965
case NVME_IOCTL_ADMIN_CMD:
963966
return nvme_user_cmd(ctrl, NULL, argp, file->f_mode);
964967
case NVME_IOCTL_ADMIN64_CMD:
965-
return nvme_user_cmd64(ctrl, NULL, argp, false, file->f_mode);
968+
return nvme_user_cmd64(ctrl, NULL, argp, 0, file->f_mode);
966969
case NVME_IOCTL_IO_CMD:
967970
return nvme_dev_user_cmd(ctrl, argp, file->f_mode);
968971
case NVME_IOCTL_RESET:

0 commit comments

Comments
 (0)