io_uring/cmd: move io_uring_try_cancel_uring_cmd()
authorPavel Begunkov <asml.silence@gmail.com>
Mon, 18 Mar 2024 22:00:23 +0000 (22:00 +0000)
committerJens Axboe <axboe@kernel.dk>
Mon, 15 Apr 2024 14:10:24 +0000 (08:10 -0600)
io_uring_try_cancel_uring_cmd() is a part of the cmd handling so let's
move it closer to all cmd bits into uring_cmd.c

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Tested-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/43a3937af4933655f0fd9362c381802f804f43de.1710799188.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c
io_uring/io_uring.h
io_uring/uring_cmd.c
io_uring/uring_cmd.h

index c170a2b8d2cf21f06d1c5af8bf57edecb94aaa95..d5ac91b5b171700774cbe99d58477ed9f292b81d 100644 (file)
@@ -95,6 +95,7 @@
 #include "waitid.h"
 #include "futex.h"
 #include "napi.h"
+#include "uring_cmd.h"
 
 #include "timeout.h"
 #include "poll.h"
@@ -174,13 +175,6 @@ static struct ctl_table kernel_io_uring_disabled_table[] = {
 };
 #endif
 
-static inline void io_submit_flush_completions(struct io_ring_ctx *ctx)
-{
-       if (!wq_list_empty(&ctx->submit_state.compl_reqs) ||
-           ctx->submit_state.cqes_count)
-               __io_submit_flush_completions(ctx);
-}
-
 static inline unsigned int __io_cqring_events(struct io_ring_ctx *ctx)
 {
        return ctx->cached_cq_tail - READ_ONCE(ctx->rings->cq.head);
@@ -3241,37 +3235,6 @@ static __cold bool io_uring_try_cancel_iowq(struct io_ring_ctx *ctx)
        return ret;
 }
 
-static bool io_uring_try_cancel_uring_cmd(struct io_ring_ctx *ctx,
-               struct task_struct *task, bool cancel_all)
-{
-       struct hlist_node *tmp;
-       struct io_kiocb *req;
-       bool ret = false;
-
-       lockdep_assert_held(&ctx->uring_lock);
-
-       hlist_for_each_entry_safe(req, tmp, &ctx->cancelable_uring_cmd,
-                       hash_node) {
-               struct io_uring_cmd *cmd = io_kiocb_to_cmd(req,
-                               struct io_uring_cmd);
-               struct file *file = req->file;
-
-               if (!cancel_all && req->task != task)
-                       continue;
-
-               if (cmd->flags & IORING_URING_CMD_CANCELABLE) {
-                       /* ->sqe isn't available if no async data */
-                       if (!req_has_async_data(req))
-                               cmd->sqe = NULL;
-                       file->f_op->uring_cmd(cmd, IO_URING_F_CANCEL);
-                       ret = true;
-               }
-       }
-       io_submit_flush_completions(ctx);
-
-       return ret;
-}
-
 static __cold bool io_uring_try_cancel_requests(struct io_ring_ctx *ctx,
                                                struct task_struct *task,
                                                bool cancel_all)
index 6426ee382276b5f298c68a450ceb894205eb374d..935d8d0747dc31b7f5c3025c2dc6d4c9c5a3c0a2 100644 (file)
@@ -154,6 +154,13 @@ static inline void io_req_task_work_add(struct io_kiocb *req)
        __io_req_task_work_add(req, 0);
 }
 
+static inline void io_submit_flush_completions(struct io_ring_ctx *ctx)
+{
+       if (!wq_list_empty(&ctx->submit_state.compl_reqs) ||
+           ctx->submit_state.cqes_count)
+               __io_submit_flush_completions(ctx);
+}
+
 #define io_for_each_link(pos, head) \
        for (pos = (head); pos; pos = pos->link)
 
index 42f63adfa54a04f0b8c67a3babb7415b2bcc96bc..1551848a9394f491a4352d62d72cc3836a1f3654 100644 (file)
 #include "rsrc.h"
 #include "uring_cmd.h"
 
+bool io_uring_try_cancel_uring_cmd(struct io_ring_ctx *ctx,
+                                  struct task_struct *task, bool cancel_all)
+{
+       struct hlist_node *tmp;
+       struct io_kiocb *req;
+       bool ret = false;
+
+       lockdep_assert_held(&ctx->uring_lock);
+
+       hlist_for_each_entry_safe(req, tmp, &ctx->cancelable_uring_cmd,
+                       hash_node) {
+               struct io_uring_cmd *cmd = io_kiocb_to_cmd(req,
+                               struct io_uring_cmd);
+               struct file *file = req->file;
+
+               if (!cancel_all && req->task != task)
+                       continue;
+
+               if (cmd->flags & IORING_URING_CMD_CANCELABLE) {
+                       /* ->sqe isn't available if no async data */
+                       if (!req_has_async_data(req))
+                               cmd->sqe = NULL;
+                       file->f_op->uring_cmd(cmd, IO_URING_F_CANCEL);
+                       ret = true;
+               }
+       }
+       io_submit_flush_completions(ctx);
+       return ret;
+}
+
 static void io_uring_cmd_del_cancelable(struct io_uring_cmd *cmd,
                unsigned int issue_flags)
 {
index 8117684ec3cac3c4e5765475ffaecd35e0448561..7356bf9aa65580f6551669de78861977f58bdf1c 100644 (file)
@@ -3,3 +3,6 @@
 int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags);
 int io_uring_cmd_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe);
 int io_uring_cmd_prep_async(struct io_kiocb *req);
+
+bool io_uring_try_cancel_uring_cmd(struct io_ring_ctx *ctx,
+                                  struct task_struct *task, bool cancel_all);
\ No newline at end of file