All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hao Xu <hao.xu@linux.dev>
To: io-uring@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>, Pavel Begunkov <asml.silence@gmail.com>
Subject: [PATCH 11/11] io_uring: cancel works in exec work list for fixed worker
Date: Mon, 27 Jun 2022 21:35:41 +0800	[thread overview]
Message-ID: <20220627133541.15223-12-hao.xu@linux.dev> (raw)
In-Reply-To: <20220627133541.15223-1-hao.xu@linux.dev>

From: Hao Xu <howeyxu@tencent.com>

When users want to cancel a request, look into the exec work list of
fixed worker as well. It's not sane to ignore it.

Signed-off-by: Hao Xu <howeyxu@tencent.com>
---
 io_uring/io-wq.c | 44 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 35 insertions(+), 9 deletions(-)

diff --git a/io_uring/io-wq.c b/io_uring/io-wq.c
index 38d88da70a40..9e8ad7455373 100644
--- a/io_uring/io-wq.c
+++ b/io_uring/io-wq.c
@@ -1285,32 +1285,44 @@ static bool io_acct_cancel_pending_work(struct io_wqe *wqe,
 	return false;
 }
 
-static void io_wqe_cancel_pending_work(struct io_wqe *wqe,
-				       struct io_cb_cancel_data *match)
+static void io_wqe_cancel_pending_work_normal(struct io_wqe *wqe,
+					      struct io_cb_cancel_data *match)
 {
-	int i, j;
-	struct io_wqe_acct *acct, *iw_acct;
+	int i;
+	struct io_wqe_acct *acct;
 
-retry_public:
+retry:
 	for (i = 0; i < IO_WQ_ACCT_NR; i++) {
 		acct = io_get_acct(wqe, i == 0, false);
 		if (io_acct_cancel_pending_work(wqe, acct, match)) {
 			if (match->cancel_all)
-				goto retry_public;
+				goto retry;
 			return;
 		}
 	}
+}
+
+static void __io_wqe_cancel_pending_work_fixed(struct io_wqe *wqe,
+					       struct io_cb_cancel_data *match,
+					       bool exec)
+{
+	int i, j;
+	struct io_wqe_acct *acct, *iw_acct;
 
-retry_private:
+retry:
 	for (i = 0; i < IO_WQ_ACCT_NR; i++) {
 		acct = io_get_acct(wqe, i == 0, true);
 		raw_spin_lock(&acct->lock);
 		for (j = 0; j < acct->nr_fixed; j++) {
-			iw_acct = &acct->fixed_workers[j]->acct;
+			if (exec)
+				iw_acct = &acct->fixed_workers[j]->acct;
+			else
+				iw_acct = &acct->fixed_workers[j]->exec_acct;
+
 			if (io_acct_cancel_pending_work(wqe, iw_acct, match)) {
 				if (match->cancel_all) {
 					raw_spin_unlock(&acct->lock);
-					goto retry_private;
+					goto retry;
 				}
 				break;
 			}
@@ -1319,6 +1331,20 @@ static void io_wqe_cancel_pending_work(struct io_wqe *wqe,
 	}
 }
 
+static void io_wqe_cancel_pending_work_fixed(struct io_wqe *wqe,
+					     struct io_cb_cancel_data *match)
+{
+	__io_wqe_cancel_pending_work_fixed(wqe, match, false);
+	__io_wqe_cancel_pending_work_fixed(wqe, match, true);
+}
+
+static void io_wqe_cancel_pending_work(struct io_wqe *wqe,
+				       struct io_cb_cancel_data *match)
+{
+	io_wqe_cancel_pending_work_normal(wqe, match);
+	io_wqe_cancel_pending_work_fixed(wqe, match);
+}
+
 static void io_wqe_cancel_running_work(struct io_wqe *wqe,
 				       struct io_cb_cancel_data *match)
 {
-- 
2.25.1


  parent reply	other threads:[~2022-06-27 13:36 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-27 13:35 [PATCH v5 00/11] fixed worker Hao Xu
2022-06-27 13:35 ` [PATCH 01/11] io-wq: add a worker flag for individual exit Hao Xu
2022-06-27 13:35 ` [PATCH 02/11] io-wq: change argument of create_io_worker() for convienence Hao Xu
2022-06-27 13:35 ` [PATCH 03/11] io-wq: add infra data structure for fixed workers Hao Xu
2022-06-27 13:35 ` [PATCH 04/11] io-wq: tweak io_get_acct() Hao Xu
2022-06-27 13:35 ` [PATCH 05/11] io-wq: fixed worker initialization Hao Xu
2022-06-27 13:35 ` [PATCH 06/11] io-wq: fixed worker exit Hao Xu
2022-06-27 13:35 ` [PATCH 07/11] io-wq: implement fixed worker logic Hao Xu
2022-06-27 13:35 ` [PATCH 08/11] io-wq: batch the handling of fixed worker private works Hao Xu
2022-06-27 13:35 ` [PATCH 09/11] io_uring: add register fixed worker interface Hao Xu
2022-06-27 13:35 ` [PATCH 10/11] io-wq: add an work list for fixed worker Hao Xu
2022-06-27 13:35 ` Hao Xu [this message]
2022-07-12  8:32 ` [PATCH v5 00/11] " Hao Xu
  -- strict thread matches above, loose matches on Subject: below --
2022-05-15 13:12 [PATCH v4 " Hao Xu
2022-05-15 13:12 ` [PATCH 11/11] io_uring: cancel works in exec work list for " Hao Xu

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=20220627133541.15223-12-hao.xu@linux.dev \
    --to=hao.xu@linux.dev \
    --cc=asml.silence@gmail.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.