From: Yi Sun <yi.sun@unisoc.com>
To: <axboe@kernel.dk>, <mst@redhat.com>, <jasowang@redhat.com>
Cc: <xuanzhuo@linux.alibaba.com>, <pbonzini@redhat.com>,
<stefanha@redhat.com>, <virtualization@lists.linux.dev>,
<linux-block@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<yi.sun@unisoc.com>, <zhiguo.niu@unisoc.com>,
<hongyu.jin@unisoc.com>, <sunyibuaa@gmail.com>
Subject: [PATCH 2/2] virtio-blk: Ensure no requests in virtqueues before deleting vqs.
Date: Mon, 22 Jan 2024 19:07:22 +0800 [thread overview]
Message-ID: <20240122110722.690223-3-yi.sun@unisoc.com> (raw)
In-Reply-To: <20240122110722.690223-1-yi.sun@unisoc.com>
Ensure no remaining requests in virtqueues before resetting vdev and
deleting virtqueues. Otherwise these requests will never be completed.
It may cause the system to become unresponsive. So it is better to place
blk_mq_quiesce_queue() in front of virtio_reset_device().
Function blk_mq_quiesce_queue() can ensure that requests have become
in_flight status, but it cannot guarantee that requests have been
processed by the device. Virtqueues should never be deleted before
all requests become complete status.
New function blk_mq_tagset_wait_request_completed() ensure that all
requests in virtqueues become complete status.
Signed-off-by: Yi Sun <yi.sun@unisoc.com>
---
drivers/block/virtio_blk.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 3b6b9abb8ce1..380f009953dd 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -1595,14 +1595,16 @@ static int virtblk_freeze(struct virtio_device *vdev)
{
struct virtio_blk *vblk = vdev->priv;
+ /* Ensure no requests in virtqueues before deleting vqs. */
+ blk_mq_quiesce_queue(vblk->disk->queue);
+ blk_mq_tagset_wait_request_completed(vblk->disk->queue->tag_set);
+
/* Ensure we don't receive any more interrupts */
virtio_reset_device(vdev);
/* Make sure no work handler is accessing the device. */
flush_work(&vblk->config_work);
- blk_mq_quiesce_queue(vblk->disk->queue);
-
vdev->config->del_vqs(vdev);
kfree(vblk->vqs);
--
2.25.1
next prev parent reply other threads:[~2024-01-22 11:08 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-22 11:07 [PATCH 0/2] Fix requests loss during virtio-blk device suspend Yi Sun
2024-01-22 11:07 ` [PATCH 1/2] blk-mq: introduce blk_mq_tagset_wait_request_completed() Yi Sun
2024-01-23 18:45 ` kernel test robot
2024-01-23 19:14 ` Keith Busch
2024-01-24 11:22 ` yi sun
2024-01-24 17:17 ` Keith Busch
2024-01-22 11:07 ` Yi Sun [this message]
2024-01-22 15:42 ` [PATCH 2/2] virtio-blk: Ensure no requests in virtqueues before deleting vqs Stefan Hajnoczi
2024-01-23 3:27 ` yi sun
2024-01-23 15:09 ` Stefan Hajnoczi
2024-01-24 7:38 ` yi sun
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=20240122110722.690223-3-yi.sun@unisoc.com \
--to=yi.sun@unisoc.com \
--cc=axboe@kernel.dk \
--cc=hongyu.jin@unisoc.com \
--cc=jasowang@redhat.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=stefanha@redhat.com \
--cc=sunyibuaa@gmail.com \
--cc=virtualization@lists.linux.dev \
--cc=xuanzhuo@linux.alibaba.com \
--cc=zhiguo.niu@unisoc.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®