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
|
||||
the device was reselected, nonzero if the IO is deferred. */
|
||||
static int lsi_queue_tag(LSIState *s, uint32_t tag, uint32_t arg)
|
||||
{
|
||||
lsi_request *p;
|
||||
|
||||
QTAILQ_FOREACH(p, &s->queue, next) {
|
||||
if (p->tag == tag) {
|
||||
p = lsi_find_by_tag(s, tag);
|
||||
if (!p) {
|
||||
BADF("IO with unknown tag %d\n", tag);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (p->pending) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
BADF("IO with unknown tag %d\n", tag);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Callback to indicate that the SCSI layer has completed a transfer. */
|
||||
static void lsi_command_complete(SCSIBus *bus, int reason, uint32_t tag,
|
||||
|
Loading…
Reference in New Issue
Block a user