From: Pavel Begunkov <asml.silence@gmail.com>
To: Hao Xu <hao.xu@linux.dev>, io-uring@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>, Wanpeng Li <wanpengli@tencent.com>,
linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 06/11] io-wq: return io_worker after successful inline worker creation
Date: Wed, 5 Jul 2023 14:05:19 +0100 [thread overview]
Message-ID: <249ca970-23e9-7b72-722e-bce4aa644dfb@gmail.com> (raw)
In-Reply-To: <20230609122031.183730-7-hao.xu@linux.dev>
On 6/9/23 13:20, Hao Xu wrote:
> From: Hao Xu <howeyxu@tencent.com>
>
> After creating a io worker inline successfully, return the io_worker
> structure. This is used by fixed worker.
>
> Signed-off-by: Hao Xu <howeyxu@tencent.com>
> ---
> io_uring/io-wq.c | 20 ++++++++++----------
> 1 file changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/io_uring/io-wq.c b/io_uring/io-wq.c
> index 048856eef4d4..4338e5b23b07 100644
> --- a/io_uring/io-wq.c
> +++ b/io_uring/io-wq.c
> @@ -137,7 +137,7 @@ struct io_cb_cancel_data {
> bool cancel_all;
> };
>
> -static bool create_io_worker(struct io_wq *wq, int index, bool fixed);
> +static struct io_worker *create_io_worker(struct io_wq *wq, int index, bool fixed);
> static void io_wq_dec_running(struct io_worker *worker);
> static bool io_acct_cancel_pending_work(struct io_wq *wq,
> struct io_wq_acct *acct,
> @@ -284,8 +284,8 @@ static bool io_wq_activate_free_worker(struct io_wq *wq,
> * We need a worker. If we find a free one, we're good. If not, and we're
> * below the max number of workers, create one.
> */
> -static bool io_wq_create_worker(struct io_wq *wq, struct io_wq_acct *acct,
> - bool fixed)
> +static struct io_worker *io_wq_create_worker(struct io_wq *wq,
> + struct io_wq_acct *acct, bool fixed)
> {
> /*
> * Most likely an attempt to queue unbounded work on an io_wq that
> @@ -297,7 +297,7 @@ static bool io_wq_create_worker(struct io_wq *wq, struct io_wq_acct *acct,
> raw_spin_lock(&wq->lock);
> if (acct->nr_workers >= acct->max_workers) {
> raw_spin_unlock(&wq->lock);
> - return true;
> + return NULL;
Something is not right here. The function could succeed even if it didn't
create a new worker. Now it's a failure.
> }
> acct->nr_workers++;
> raw_spin_unlock(&wq->lock);
> @@ -809,11 +809,11 @@ static void io_workqueue_create(struct work_struct *work)
> kfree(worker);
> }
>
> -static bool create_io_worker(struct io_wq *wq, int index, bool fixed)
> +static struct io_worker *create_io_worker(struct io_wq *wq, int index, bool fixed)
> {
> struct io_wq_acct *acct = &wq->acct[index];
> struct io_worker *worker;
> - struct task_struct *tsk;
> + struct task_struct *tsk = NULL;
>
> __set_current_state(TASK_RUNNING);
>
> @@ -825,7 +825,7 @@ static bool create_io_worker(struct io_wq *wq, int index, bool fixed)
> acct->nr_workers--;
> raw_spin_unlock(&wq->lock);
> io_worker_ref_put(wq);
> - return false;
> + return tsk ? (struct io_worker *)tsk : ERR_PTR(-ENOMEM);
How it this conversion valid? I don't remember us overlaying struct
io_worker onto task_struct
> }
>
> refcount_set(&worker->ref, 1);
> @@ -841,8 +841,8 @@ static bool create_io_worker(struct io_wq *wq, int index, bool fixed)
>
> tsk = create_io_thread(io_wq_worker, worker, NUMA_NO_NODE);
> if (!IS_ERR(tsk)) {
> - if (!fixed)
> - io_init_new_worker(wq, worker, tsk);
> + io_init_new_worker(wq, worker, tsk);
> + return worker;
> } else if (fixed || !io_should_retry_thread(PTR_ERR(tsk))) {
> kfree(worker);
> goto fail;
> @@ -851,7 +851,7 @@ static bool create_io_worker(struct io_wq *wq, int index, bool fixed)
> schedule_work(&worker->work);
> }
>
> - return true;
> + return (struct io_worker *)tsk;
> }
>
> /*
--
Pavel Begunkov
next prev parent reply other threads:[~2023-07-05 13:08 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-09 12:20 [RFC PATCH 00/11] fixed worker Hao Xu
2023-06-09 12:20 ` [PATCH 01/11] io-wq: fix worker counting after worker received exit signal Hao Xu
2023-07-05 12:10 ` Pavel Begunkov
2023-06-09 12:20 ` [PATCH 02/11] io-wq: add a new worker flag to indicate worker exit Hao Xu
2023-07-05 12:16 ` Pavel Begunkov
2023-06-09 12:20 ` [PATCH 03/11] io-wq: add a new type io-wq worker Hao Xu
2023-07-05 12:26 ` Pavel Begunkov
2023-06-09 12:20 ` [PATCH 04/11] io-wq: add fixed worker members in io_wq_acct Hao Xu
2023-06-09 12:20 ` [PATCH 05/11] io-wq: add a new parameter for creating a new fixed worker Hao Xu
2023-07-05 12:54 ` Pavel Begunkov
2023-06-09 12:20 ` [PATCH 06/11] io-wq: return io_worker after successful inline worker creation Hao Xu
2023-07-05 13:05 ` Pavel Begunkov [this message]
2023-06-09 12:20 ` [PATCH 07/11] io_uring: add new api to register fixed workers Hao Xu
2023-06-09 13:07 ` Ammar Faizi
2023-06-12 13:46 ` Hao Xu
2023-06-09 13:54 ` Ammar Faizi
2023-06-12 13:47 ` Hao Xu
2023-07-05 13:10 ` Pavel Begunkov
2023-06-09 12:20 ` [PATCH 08/11] io_uring: add function to unregister " Hao Xu
2023-07-05 13:13 ` Pavel Begunkov
2023-06-09 12:20 ` [PATCH 09/11] io-wq: add strutures to allow to wait fixed workers exit Hao Xu
2023-06-09 12:20 ` [PATCH 10/11] io-wq: distinguish fixed worker by its name Hao Xu
2023-07-05 13:15 ` Pavel Begunkov
2023-06-09 12:20 ` [PATCH 11/11] io_uring: add IORING_SETUP_FIXED_WORKER_ONLY and its friend Hao Xu
2023-07-05 13:17 ` Pavel Begunkov
2023-06-20 12:35 ` [RFC PATCH 00/11] fixed worker Hao Xu
2023-06-28 9:19 ` 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=249ca970-23e9-7b72-722e-bce4aa644dfb@gmail.com \
--to=asml.silence@gmail.com \
--cc=axboe@kernel.dk \
--cc=hao.xu@linux.dev \
--cc=io-uring@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=wanpengli@tencent.com \
/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.