io_uring/futex: convert to io_cancel_remove_all()
authorJens Axboe <axboe@kernel.dk>
Wed, 5 Feb 2025 19:51:26 +0000 (12:51 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 17 Feb 2025 12:34:45 +0000 (05:34 -0700)
Use the generic helper for cancelations.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/futex.c

index 43e2143..47b8c22 100644 (file)
@@ -90,7 +90,7 @@ static bool io_futexv_claim(struct io_futex *iof)
        return true;
 }
 
-static bool __io_futex_cancel(struct io_ring_ctx *ctx, struct io_kiocb *req)
+static bool __io_futex_cancel(struct io_kiocb *req)
 {
        /* futex wake already done or in progress */
        if (req->opcode == IORING_OP_FUTEX_WAIT) {
@@ -128,7 +128,7 @@ int io_futex_cancel(struct io_ring_ctx *ctx, struct io_cancel_data *cd,
                if (req->cqe.user_data != cd->data &&
                    !(cd->flags & IORING_ASYNC_CANCEL_ANY))
                        continue;
-               if (__io_futex_cancel(ctx, req))
+               if (__io_futex_cancel(req))
                        nr++;
                if (!(cd->flags & IORING_ASYNC_CANCEL_ALL))
                        break;
@@ -144,21 +144,7 @@ int io_futex_cancel(struct io_ring_ctx *ctx, struct io_cancel_data *cd,
 bool io_futex_remove_all(struct io_ring_ctx *ctx, struct io_uring_task *tctx,
                         bool cancel_all)
 {
-       struct hlist_node *tmp;
-       struct io_kiocb *req;
-       bool found = false;
-
-       lockdep_assert_held(&ctx->uring_lock);
-
-       hlist_for_each_entry_safe(req, tmp, &ctx->futex_list, hash_node) {
-               if (!io_match_task_safe(req, tctx, cancel_all))
-                       continue;
-               hlist_del_init(&req->hash_node);
-               __io_futex_cancel(ctx, req);
-               found = true;
-       }
-
-       return found;
+       return io_cancel_remove_all(ctx, tctx, &ctx->futex_list, cancel_all, __io_futex_cancel);
 }
 
 int io_futex_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe)