scsi/scsi_bus: switch search direction in scsi_device_find
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 <mlevitsk@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20200913160259.32145-2-mlevitsk@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
bb755ba47f
commit
7a8202c521
@ -1572,7 +1572,7 @@ SCSIDevice *scsi_device_find(SCSIBus *bus, int channel, int id, int lun)
|
|||||||
BusChild *kid;
|
BusChild *kid;
|
||||||
SCSIDevice *target_dev = NULL;
|
SCSIDevice *target_dev = NULL;
|
||||||
|
|
||||||
QTAILQ_FOREACH_REVERSE(kid, &bus->qbus.children, sibling) {
|
QTAILQ_FOREACH(kid, &bus->qbus.children, sibling) {
|
||||||
DeviceState *qdev = kid->child;
|
DeviceState *qdev = kid->child;
|
||||||
SCSIDevice *dev = SCSI_DEVICE(qdev);
|
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) {
|
if (dev->lun == lun) {
|
||||||
return dev;
|
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;
|
return target_dev;
|
||||||
|
Loading…
Reference in New Issue
Block a user