From: Ming Lei <ming.lei@redhat.com>
To: Muchun Song <songmuchun@bytedance.com>
Cc: axboe@kernel.dk, yukuai1@huaweicloud.com,
linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
muchun.song@linux.dev, stable@vger.kernel.org
Subject: Re: [PATCH v2 2/3] block: fix ordering between checking QUEUE_FLAG_QUIESCED and adding requests
Date: Wed, 4 Sep 2024 20:56:18 +0800 [thread overview]
Message-ID: <ZthY8prW0dZ0+Nco@fedora> (raw)
In-Reply-To: <20240903081653.65613-3-songmuchun@bytedance.com>
On Tue, Sep 03, 2024 at 04:16:52PM +0800, Muchun Song wrote:
> Supposing the following scenario.
>
> CPU0 CPU1
>
> blk_mq_insert_request() 1) store blk_mq_unquiesce_queue()
> blk_mq_run_hw_queue() blk_queue_flag_clear(QUEUE_FLAG_QUIESCED) 3) store
> if (blk_queue_quiesced()) 2) load blk_mq_run_hw_queues()
> return blk_mq_run_hw_queue()
> blk_mq_sched_dispatch_requests() if (!blk_mq_hctx_has_pending()) 4) load
> return
>
> The full memory barrier should be inserted between 1) and 2), as well as
> between 3) and 4) to make sure that either CPU0 sees QUEUE_FLAG_QUIESCED is
> cleared or CPU1 sees dispatch list or setting of bitmap of software queue.
> Otherwise, either CPU will not re-run the hardware queue causing starvation.
>
> So the first solution is to 1) add a pair of memory barrier to fix the
> problem, another solution is to 2) use hctx->queue->queue_lock to synchronize
> QUEUE_FLAG_QUIESCED. Here, we chose 2) to fix it since memory barrier is not
> easy to be maintained.
>
> Fixes: f4560ffe8cec1 ("blk-mq: use QUEUE_FLAG_QUIESCED to quiesce queue")
> Cc: stable@vger.kernel.org
> Cc: Muchun Song <muchun.song@linux.dev>
> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
thanks,
Ming
next prev parent reply other threads:[~2024-09-04 12:56 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-03 8:16 [PATCH v2 0/3] Fix some starvation problems in block layer Muchun Song
2024-09-03 8:16 ` [PATCH v2 1/3] block: fix missing dispatching request when queue is started or unquiesced Muchun Song
2024-09-10 13:17 ` Jens Axboe
2024-09-11 2:43 ` Muchun Song
2024-09-03 8:16 ` [PATCH v2 2/3] block: fix ordering between checking QUEUE_FLAG_QUIESCED and adding requests Muchun Song
2024-09-04 12:56 ` Ming Lei [this message]
2024-09-10 13:22 ` Jens Axboe
2024-09-11 3:54 ` Ming Lei
2024-09-11 3:59 ` Muchun Song
2024-09-11 5:20 ` Muchun Song
2024-09-12 3:27 ` Muchun Song
2024-09-12 6:27 ` Muchun Song
2024-09-11 3:56 ` Muchun Song
2024-09-03 8:16 ` [PATCH v2 3/3] block: fix ordering between checking BLK_MQ_S_STOPPED " Muchun Song
2024-09-04 13:04 ` Ming Lei
2024-09-10 13:22 ` Jens Axboe
2024-09-11 2:44 ` Muchun Song
2024-09-10 2:49 ` [PATCH v2 0/3] Fix some starvation problems in block layer Muchun Song
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=ZthY8prW0dZ0+Nco@fedora \
--to=ming.lei@redhat.com \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=muchun.song@linux.dev \
--cc=songmuchun@bytedance.com \
--cc=stable@vger.kernel.org \
--cc=yukuai1@huaweicloud.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.