summaryrefslogtreecommitdiff
path: root/io_uring
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2026-01-14 08:51:02 -0700
committerJens Axboe <axboe@kernel.dk>2026-01-14 22:04:11 -0700
commit8661d0b142bccfa19bb542ee21ec45a5423899ea (patch)
tree6d3695ec132f7e3d0c5b8cd8ba77417bab54a011 /io_uring
parent697a5284ad9697609324739e38e341612cd342a6 (diff)
io_uring/uring_cmd: explicitly disallow cancelations for IOPOLL
This currently isn't supported, and due to a recent commit, it also cannot easily be supported by io_uring due to hash_node and IOPOLL completion data overlapping. This can be revisited if we ever do support cancelations of requests that have gone to the block stack. Suggested-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Ming Lei <ming.lei@redhat.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring')
-rw-r--r--io_uring/uring_cmd.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c
index 197474911f04..ee7b49f47cb5 100644
--- a/io_uring/uring_cmd.c
+++ b/io_uring/uring_cmd.c
@@ -104,6 +104,15 @@ void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd,
struct io_kiocb *req = cmd_to_io_kiocb(cmd);
struct io_ring_ctx *ctx = req->ctx;
+ /*
+ * Doing cancelations on IOPOLL requests are not supported. Both
+ * because they can't get canceled in the block stack, but also
+ * because iopoll completion data overlaps with the hash_node used
+ * for tracking.
+ */
+ if (ctx->flags & IORING_SETUP_IOPOLL)
+ return;
+
if (!(cmd->flags & IORING_URING_CMD_CANCELABLE)) {
cmd->flags |= IORING_URING_CMD_CANCELABLE;
io_ring_submit_lock(ctx, issue_flags);