[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 01/13] virtio-scsi: avoid race between unplug and transport e
From: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH 01/13] virtio-scsi: avoid race between unplug and transport event |
Date: |
Tue, 4 Apr 2023 09:06:58 -0400 |
On Mon, Apr 03, 2023 at 10:47:11PM +0200, Philippe Mathieu-Daudé wrote:
> On 3/4/23 20:29, Stefan Hajnoczi wrote:
> > 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.
> >
> > Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> > ---
> > hw/scsi/scsi-bus.c | 3 ++-
> > hw/scsi/virtio-scsi.c | 18 +++++++++---------
> > 2 files changed, 11 insertions(+), 10 deletions(-)
> >
> > diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
> > index c97176110c..f9bd064833 100644
> > --- a/hw/scsi/scsi-bus.c
> > +++ b/hw/scsi/scsi-bus.c
> > @@ -487,7 +487,8 @@ static bool
> > scsi_target_emulate_report_luns(SCSITargetReq *r)
> > DeviceState *qdev = kid->child;
> > SCSIDevice *dev = SCSI_DEVICE(qdev);
> > - if (dev->channel == channel && dev->id == id && dev->lun != 0)
> > {
> > + if (dev->channel == channel && dev->id == id && dev->lun != 0
> > &&
> > + qatomic_load_acquire(&dev->qdev.realized)) {
>
> Would this be more useful as a qdev_is_realized() helper?
Yes. There are no other users, but I think a helper makes sense.
Stefan
signature.asc
Description: PGP signature
- Re: [PATCH 02/13] virtio-scsi: stop using aio_disable_external() during unplug, (continued)
- [PATCH 05/13] block/export: wait for vhost-user-blk requests when draining, Stefan Hajnoczi, 2023/04/03
- [PATCH 06/13] block/export: stop using is_external in vhost-user-blk server, Stefan Hajnoczi, 2023/04/03
- [PATCH 03/13] block/export: only acquire AioContext once for vhost_user_server_stop(), Stefan Hajnoczi, 2023/04/03
- [PATCH 08/13] hw/xen: do not use aio_set_fd_handler(is_external=true) in xen_xenstore, Stefan Hajnoczi, 2023/04/03
- [PATCH 04/13] util/vhost-user-server: rename refcount to in_flight counter, Stefan Hajnoczi, 2023/04/03
- [PATCH 01/13] virtio-scsi: avoid race between unplug and transport event, Stefan Hajnoczi, 2023/04/03
- Re: [PATCH 01/13] virtio-scsi: avoid race between unplug and transport event, Michael S. Tsirkin, 2023/04/04
- [PATCH 09/13] hw/xen: do not set is_external=true on evtchn fds, Stefan Hajnoczi, 2023/04/03
- [PATCH 07/13] virtio: do not set is_external=true on host notifiers, Stefan Hajnoczi, 2023/04/03
- [PATCH 12/13] block/fuse: do not set is_external=true on FUSE fd, Stefan Hajnoczi, 2023/04/03
- [PATCH 10/13] block/export: rewrite vduse-blk drain code, Stefan Hajnoczi, 2023/04/03
- [PATCH 13/13] aio: remove aio_disable_external() API, Stefan Hajnoczi, 2023/04/03
- [PATCH 11/13] block/fuse: take AioContext lock around blk_exp_ref/unref(), Stefan Hajnoczi, 2023/04/03