On 13/09/20 18:02, Maxim Levitsky wrote: > This change will allow us to convert the bus children list to RCU, > while not changing the logic of this function > > Signed-off-by: Maxim Levitsky <[email protected]> > Reviewed-by: Stefan Hajnoczi <[email protected]> > --- > hw/scsi/scsi-bus.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c > index df65cc2223..f8adfbc2a5 100644 > --- a/hw/scsi/scsi-bus.c > +++ b/hw/scsi/scsi-bus.c > @@ -1572,7 +1572,7 @@ SCSIDevice *scsi_device_find(SCSIBus *bus, int channel, > int id, int lun) > BusChild *kid; > SCSIDevice *target_dev = NULL; > > - QTAILQ_FOREACH_REVERSE(kid, &bus->qbus.children, sibling) { > + QTAILQ_FOREACH(kid, &bus->qbus.children, sibling) { > DeviceState *qdev = kid->child; > SCSIDevice *dev = SCSI_DEVICE(qdev); > > @@ -1580,7 +1580,15 @@ SCSIDevice *scsi_device_find(SCSIBus *bus, int > channel, int id, int lun) > if (dev->lun == lun) { > return dev; > } > - target_dev = dev; > + > + /* > + * If we don't find exact match (channel/bus/lun), > + * we will return the first device which matches channel/bus > + */ > + > + if (!target_dev) { > + target_dev = dev; > + } > } > } > return target_dev; >
I think this breaks the detection of duplicate LUNs. I'll play with it and let you know. Paolo
