From 8661d0b142bccfa19bb542ee21ec45a5423899ea Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Wed, 14 Jan 2026 08:51:02 -0700 Subject: [PATCH] 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 Reviewed-by: Ming Lei Signed-off-by: Jens Axboe --- io_uring/uring_cmd.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/io_uring/uring_cmd.c b/io_uring/uring_cmd.c index 197474911f046..ee7b49f47cb55 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); -- 2.47.3