All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: Muchun Song <songmuchun@bytedance.com>
Cc: stable@vger.kernel.org, muchun.song@linux.dev,
	Ming Lei <ming.lei@redhat.com>, Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH 5.15.y] block: fix ordering between checking QUEUE_FLAG_QUIESCED request adding
Date: Tue, 22 Apr 2025 14:21:37 +0200	[thread overview]
Message-ID: <2025042259-gab-earflap-ba40@gregkh> (raw)
In-Reply-To: <20250317072021.22578-1-songmuchun@bytedance.com>

On Mon, Mar 17, 2025 at 03:20:21PM +0800, Muchun Song wrote:
> Supposing the following scenario.
> 
> CPU0                        CPU1
> 
> blk_mq_insert_request()     1) store
>                             blk_mq_unquiesce_queue()
>                             blk_queue_flag_clear()                3) store
>                               blk_mq_run_hw_queues()
>                                 blk_mq_run_hw_queue()
>                                   if (!blk_mq_hctx_has_pending()) 4) load
>                                     return
> blk_mq_run_hw_queue()
>   if (blk_queue_quiesced()) 2) load
>     return
>   blk_mq_sched_dispatch_requests()
> 
> 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 rerun 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: f4560ffe8cec ("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>
> Link: https://lore.kernel.org/r/20241014092934.53630-3-songmuchun@bytedance.com
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> (cherry picked from commit 6bda857bcbb86fb9d0e54fbef93a093d51172acc)

For obvious reasons we can not take a change for an older stable kernel
tree, and NOT a newer one.

Please resubmit the backports for ALL relevant stable kernel branches.
You do not want to upgrade and have a regression.

thanks,

greg k-h

      parent reply	other threads:[~2025-04-22 12:21 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-03 10:10 FAILED: patch "[PATCH] block: fix ordering between checking QUEUE_FLAG_QUIESCED" failed to apply to 5.15-stable tree gregkh
2025-03-17  3:29 ` [PATCH 5.15.y] block: fix ordering between checking QUEUE_FLAG_QUIESCED request adding Muchun Song
2025-03-17  6:56   ` Greg KH
2025-03-17 16:40   ` Sasha Levin
2025-03-17  7:20 ` Muchun Song
2025-03-17 16:40   ` Sasha Levin
2025-04-22 12:21   ` Greg KH [this message]

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=2025042259-gab-earflap-ba40@gregkh \
    --to=gregkh@linuxfoundation.org \
    --cc=axboe@kernel.dk \
    --cc=ming.lei@redhat.com \
    --cc=muchun.song@linux.dev \
    --cc=songmuchun@bytedance.com \
    --cc=stable@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.