lsi: extract lsi_find_by_tag
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
ad2d30f79d
commit
11257187e1
@ -652,14 +652,31 @@ static void lsi_reselect(LSIState *s, lsi_request *p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static lsi_request *lsi_find_by_tag(LSIState *s, uint32_t tag)
|
||||||
|
{
|
||||||
|
lsi_request *p;
|
||||||
|
|
||||||
|
QTAILQ_FOREACH(p, &s->queue, next) {
|
||||||
|
if (p->tag == tag) {
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Record that data is available for a queued command. Returns zero if
|
/* Record that data is available for a queued command. Returns zero if
|
||||||
the device was reselected, nonzero if the IO is deferred. */
|
the device was reselected, nonzero if the IO is deferred. */
|
||||||
static int lsi_queue_tag(LSIState *s, uint32_t tag, uint32_t arg)
|
static int lsi_queue_tag(LSIState *s, uint32_t tag, uint32_t arg)
|
||||||
{
|
{
|
||||||
lsi_request *p;
|
lsi_request *p;
|
||||||
|
|
||||||
QTAILQ_FOREACH(p, &s->queue, next) {
|
p = lsi_find_by_tag(s, tag);
|
||||||
if (p->tag == tag) {
|
if (!p) {
|
||||||
|
BADF("IO with unknown tag %d\n", tag);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (p->pending) {
|
if (p->pending) {
|
||||||
BADF("Multiple IO pending for tag %d\n", tag);
|
BADF("Multiple IO pending for tag %d\n", tag);
|
||||||
}
|
}
|
||||||
@ -681,10 +698,6 @@ static int lsi_queue_tag(LSIState *s, uint32_t tag, uint32_t arg)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
BADF("IO with unknown tag %d\n", tag);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Callback to indicate that the SCSI layer has completed a transfer. */
|
/* Callback to indicate that the SCSI layer has completed a transfer. */
|
||||||
static void lsi_command_complete(SCSIBus *bus, int reason, uint32_t tag,
|
static void lsi_command_complete(SCSIBus *bus, int reason, uint32_t tag,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user