Merge tag 'csky-for-linus-6.6-2' of https://github.com/c-sky/csky-linux
[platform/kernel/linux-starfive.git] / io_uring / timeout.c
index fb0547b..7fd7dbb 100644 (file)
@@ -73,8 +73,8 @@ static void io_timeout_complete(struct io_kiocb *req, struct io_tw_state *ts)
 
        if (!io_timeout_finish(timeout, data)) {
                bool filled;
-               filled = io_aux_cqe(req, ts->locked, -ETIME, IORING_CQE_F_MORE,
-                                   false);
+               filled = io_fill_cqe_req_aux(req, ts->locked, -ETIME,
+                                            IORING_CQE_F_MORE);
                if (filled) {
                        /* re-arm timer */
                        spin_lock_irq(&ctx->timeout_lock);
@@ -268,16 +268,10 @@ static struct io_kiocb *io_timeout_extract(struct io_ring_ctx *ctx,
        list_for_each_entry(timeout, &ctx->timeout_list, list) {
                struct io_kiocb *tmp = cmd_to_io_kiocb(timeout);
 
-               if (!(cd->flags & IORING_ASYNC_CANCEL_ANY) &&
-                   cd->data != tmp->cqe.user_data)
-                       continue;
-               if (cd->flags & (IORING_ASYNC_CANCEL_ALL|IORING_ASYNC_CANCEL_ANY)) {
-                       if (cd->seq == tmp->work.cancel_seq)
-                               continue;
-                       tmp->work.cancel_seq = cd->seq;
+               if (io_cancel_req_match(tmp, cd)) {
+                       req = tmp;
+                       break;
                }
-               req = tmp;
-               break;
        }
        if (!req)
                return ERR_PTR(-ENOENT);
@@ -409,7 +403,7 @@ static int io_timeout_update(struct io_ring_ctx *ctx, __u64 user_data,
                             struct timespec64 *ts, enum hrtimer_mode mode)
        __must_hold(&ctx->timeout_lock)
 {
-       struct io_cancel_data cd = { .data = user_data, };
+       struct io_cancel_data cd = { .ctx = ctx, .data = user_data, };
        struct io_kiocb *req = io_timeout_extract(ctx, &cd);
        struct io_timeout *timeout = io_kiocb_to_cmd(req, struct io_timeout);
        struct io_timeout_data *data;
@@ -473,7 +467,7 @@ int io_timeout_remove(struct io_kiocb *req, unsigned int issue_flags)
        int ret;
 
        if (!(tr->flags & IORING_TIMEOUT_UPDATE)) {
-               struct io_cancel_data cd = { .data = tr->addr, };
+               struct io_cancel_data cd = { .ctx = ctx, .data = tr->addr, };
 
                spin_lock(&ctx->completion_lock);
                ret = io_timeout_cancel(ctx, &cd);