From: lizetao <lizetao1@huawei.com>
To: Jens Axboe <axboe@kernel.dk>
Cc: "io-uring@vger.kernel.org" <io-uring@vger.kernel.org>
Subject: RE: [PATCH 1/6] io_uring/cancel: add generic remove_all helper
Date: Thu, 6 Feb 2025 12:46:01 +0000 [thread overview]
Message-ID: <689a799d20e048f8a42ab2e927493279@huawei.com> (raw)
In-Reply-To: <20250205202641.646812-2-axboe@kernel.dk>
> -----Original Message-----
> From: Jens Axboe <axboe@kernel.dk>
> Sent: Thursday, February 6, 2025 4:26 AM
> To: io-uring@vger.kernel.org
> Cc: Jens Axboe <axboe@kernel.dk>
> Subject: [PATCH 1/6] io_uring/cancel: add generic remove_all helper
>
> Any opcode that is cancelable ends up defining its own remove all helper, which
> iterates the pending list and cancels matches. Add a generic helper for it, which
> can be used by them.
>
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> ---
> io_uring/cancel.c | 20 ++++++++++++++++++++ io_uring/cancel.h | 4 ++++
> 2 files changed, 24 insertions(+)
>
> diff --git a/io_uring/cancel.c b/io_uring/cancel.c index
> 484193567839..0565dc0d7611 100644
> --- a/io_uring/cancel.c
> +++ b/io_uring/cancel.c
> @@ -341,3 +341,23 @@ int io_sync_cancel(struct io_ring_ctx *ctx, void __user
> *arg)
> fput(file);
> return ret;
> }
> +
> +bool io_cancel_remove_all(struct io_ring_ctx *ctx, struct io_uring_task *tctx,
> + struct hlist_head *list, bool cancel_all,
> + bool (*cancel)(struct io_kiocb *)) {
> + struct hlist_node *tmp;
> + struct io_kiocb *req;
> + bool found = false;
> +
> + lockdep_assert_held(&ctx->uring_lock);
> +
> + hlist_for_each_entry_safe(req, tmp, list, hash_node) {
> + if (!io_match_task_safe(req, tctx, cancel_all))
> + continue;
Should call hlist_del_init(&req->hash_node) here, just like the original code logic.
> + if (cancel(req))
> + found = true;
> + }
> +
> + return found;
> +}
> diff --git a/io_uring/cancel.h b/io_uring/cancel.h index
> bbfea2cd00ea..80734a0a2b26 100644
> --- a/io_uring/cancel.h
> +++ b/io_uring/cancel.h
> @@ -24,6 +24,10 @@ int io_try_cancel(struct io_uring_task *tctx, struct
> io_cancel_data *cd, int io_sync_cancel(struct io_ring_ctx *ctx, void __user
> *arg); bool io_cancel_req_match(struct io_kiocb *req, struct io_cancel_data
> *cd);
>
> +bool io_cancel_remove_all(struct io_ring_ctx *ctx, struct io_uring_task *tctx,
> + struct hlist_head *list, bool cancel_all,
> + bool (*cancel)(struct io_kiocb *));
> +
> static inline bool io_cancel_match_sequence(struct io_kiocb *req, int sequence)
> {
> if (req->cancel_seq_set && sequence == req->work.cancel_seq)
> --
> 2.47.2
>
---
Li Zetao
next prev parent reply other threads:[~2025-02-06 12:46 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-05 20:26 [PATCHSET 0/6] Cancelation cleanups Jens Axboe
2025-02-05 20:26 ` [PATCH 1/6] io_uring/cancel: add generic remove_all helper Jens Axboe
2025-02-06 12:46 ` lizetao [this message]
2025-02-06 14:07 ` Jens Axboe
2025-02-05 20:26 ` [PATCH 2/6] io_uring/futex: convert to io_cancel_remove_all() Jens Axboe
2025-02-05 20:26 ` [PATCH 3/6] io_uring/waitid: " Jens Axboe
2025-02-05 20:26 ` [PATCH 4/6] io_uring/cancel: add generic cancel helper Jens Axboe
2025-02-05 20:26 ` [PATCH 5/6] io_uring/futex: use generic io_cancel_remove() helper Jens Axboe
2025-02-06 12:56 ` lizetao
2025-02-06 14:10 ` Jens Axboe
2025-02-05 20:26 ` [PATCH 6/6] io_uring/waitid: " Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=689a799d20e048f8a42ab2e927493279@huawei.com \
--to=lizetao1@huawei.com \
--cc=axboe@kernel.dk \
--cc=io-uring@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.