[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 01/13] virtio-scsi: avoid race between unplug and transport event
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@xxxxxxxxxx> > > --- > > 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 Attachment:
signature.asc
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |