aboutsummaryrefslogtreecommitdiff
path: root/io_uring/uring_cmd.c
diff options
context:
space:
mode:
authorGravatar Jens Axboe <axboe@kernel.dk> 2023-03-08 09:26:13 -0700
committerGravatar Jens Axboe <axboe@kernel.dk> 2023-03-09 09:23:59 -0700
commit03b3d6be73e81ddb7c2930d942cdd17f4cfd5ba5 (patch)
treecd633f5213076616d13d9d13dca6c4bfc6f6324a /io_uring/uring_cmd.c
parentio_uring/io-wq: stop setting PF_NO_SETAFFINITY on io-wq workers (diff)
downloadlinux-03b3d6be73e81ddb7c2930d942cdd17f4cfd5ba5.tar.gz
linux-03b3d6be73e81ddb7c2930d942cdd17f4cfd5ba5.tar.bz2
linux-03b3d6be73e81ddb7c2930d942cdd17f4cfd5ba5.zip
io_uring/uring_cmd: ensure that device supports IOPOLL
It's possible for a file type to support uring commands, but not pollable ones. Hence before issuing one of those, we should check that it is supported and error out upfront if it isn't. Cc: stable@vger.kernel.org Fixes: 5756a3a7e713 ("io_uring: add iopoll infrastructure for io_uring_cmd") Link: https://github.com/axboe/liburing/issues/816 Reviewed-by: Kanchan Joshi <joshi.k@samsung.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/uring_cmd.c')
-rw-r--r--io_uring/uring_cmd.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c
index 446a189b78b0..2e4c483075d3 100644
--- a/io_uring/uring_cmd.c
+++ b/io_uring/uring_cmd.c
@@ -108,7 +108,7 @@ int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
struct file *file = req->file;
int ret;
- if (!req->file->f_op->uring_cmd)
+ if (!file->f_op->uring_cmd)
return -EOPNOTSUPP;
ret = security_uring_cmd(ioucmd);
@@ -120,6 +120,8 @@ int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
if (ctx->flags & IORING_SETUP_CQE32)
issue_flags |= IO_URING_F_CQE32;
if (ctx->flags & IORING_SETUP_IOPOLL) {
+ if (!file->f_op->uring_cmd_iopoll)
+ return -EOPNOTSUPP;
issue_flags |= IO_URING_F_IOPOLL;
req->iopoll_completed = 0;
WRITE_ONCE(ioucmd->cookie, NULL);