[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 03/20] virtio-scsi: avoid race between unplug and transpor
From: |
Kevin Wolf |
Subject: |
Re: [PATCH v4 03/20] virtio-scsi: avoid race between unplug and transport event |
Date: |
Tue, 2 May 2023 17:19:46 +0200 |
Am 25.04.2023 um 19:26 hat Stefan Hajnoczi geschrieben:
> Only report a transport reset event to the guest after the SCSIDevice
> has been unrealized by qdev_simple_device_unplug_cb().
>
> qdev_simple_device_unplug_cb() sets the SCSIDevice's qdev.realized field
> to false so that scsi_device_find/get() no longer see it.
>
> scsi_target_emulate_report_luns() also needs to be updated to filter out
> SCSIDevices that are unrealized.
>
> These changes ensure that the guest driver does not see the SCSIDevice
> that's being unplugged if it responds very quickly to the transport
> reset event.
>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> Reviewed-by: Daniil Tatianin <d-tatianin@yandex-team.ru>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> @@ -1082,6 +1073,15 @@ static void virtio_scsi_hotunplug(HotplugHandler
> *hotplug_dev, DeviceState *dev,
> blk_set_aio_context(sd->conf.blk, qemu_get_aio_context(), NULL);
> virtio_scsi_release(s);
> }
> +
> + if (virtio_vdev_has_feature(vdev, VIRTIO_SCSI_F_HOTPLUG)) {
> + virtio_scsi_acquire(s);
> + virtio_scsi_push_event(s, sd,
> + VIRTIO_SCSI_T_TRANSPORT_RESET,
> + VIRTIO_SCSI_EVT_RESET_REMOVED);
> + scsi_bus_set_ua(&s->bus, SENSE_CODE(REPORTED_LUNS_CHANGED));
> + virtio_scsi_release(s);
> + }
> }
s, sd and s->bus are all unrealized at this point, whereas before this
patch they were still realized. I couldn't find any practical problem
with it, but it made me nervous enough that I thought I should comment
on it at least.
Should we maybe have documentation on these functions that says that
they accept unrealized objects as their parameters?
Kevin
- Re: [PATCH v4 03/20] virtio-scsi: avoid race between unplug and transport event,
Kevin Wolf <=