qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH] virtio-blk: don't start dataplane during the stop of dataplane


From: lv.mengzhao
Subject: [PATCH] virtio-blk: don't start dataplane during the stop of dataplane
Date: Wed, 11 Oct 2023 15:17:54 +0800 (CST)

From: hujian <hu.jian@zte.com.cn>


During the stop of dataplane for virtio-blk, virtio_bus_cleanup_host_notifier() is be

called to clean up notifier at the end, if polled ioeventfd, virtio_blk_handle_output()

is used to handle io request. But due to s->dataplane_disabled is false, it will be

returned directly, which drops io request.

Backtrace:

->virtio_blk_data_plane_stop

  ->virtio_bus_cleanup_host_notifier

    ->virtio_queue_host_notifier_read

      ->virtio_queue_notify_vq

        ->vq->handle_output

          ->virtio_blk_handle_output

            ->if (s->dataplane  && !s->dataplane_stoped)

              ->if (!s->dataplane_disabled)

                ->return *

            ->virtio_blk_handle_output_do

The above problem can occur when using "virsh reset" cmdline to reset guest, while

guest does io.

To fix this problem, don't try to start dataplane if s->stopping is true, and io will

be handled by virtio_blk_handle_vq().


Signed-off-by: hujian <hu.jian@zte.com.cn>

---

 hw/block/virtio-blk.c | 2 +-

 1 file changed, 1 insertion(+), 1 deletion(-)


diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c

index 39e7f23..c2d5938 100644

--- a/hw/block/virtio-blk.c

+++ b/hw/block/virtio-blk.c

@@ -1166,7 +1166,7 @@ static void virtio_blk_handle_output(VirtIODevice *vdev, VirtQueue *vq)

 {

     VirtIOBlock *s = (VirtIOBlock *)vdev;


-    if (s->dataplane && !s->dataplane_started) {

+    if (s->dataplane && !s->dataplane_started && !s->stopping) {

         /* Some guests kick before setting VIRTIO_CONFIG_S_DRIVER_OK so start

          * dataplane here instead of waiting for .set_status().

          */

--

1.8.3.1






reply via email to

[Prev in Thread] Current Thread [Next in Thread]