summaryrefslogtreecommitdiffstats
path: root/hw/scsi.h
diff options
context:
space:
mode:
authorPaolo Bonzini2011-10-25 12:53:33 +0200
committerKevin Wolf2011-10-28 19:25:52 +0200
commite88c591d63ed1bc8520f4f276bebd77c22e4ec72 (patch)
tree5c12cbd48d40a4f27a7ea04dd4a2b04ef1485e8a /hw/scsi.h
parentscsi: pass cdb to alloc_req (diff)
downloadqemu-e88c591d63ed1bc8520f4f276bebd77c22e4ec72.tar.gz
qemu-e88c591d63ed1bc8520f4f276bebd77c22e4ec72.tar.xz
qemu-e88c591d63ed1bc8520f4f276bebd77c22e4ec72.zip
scsi: do not call transfer_data after canceling a request
Otherwise, if cancellation is "faked" by the AIO layer and goes through qemu_aio_flush, the whole request is completed synchronously during scsi_req_cancel. Using the enqueued flag would work here, but not in the next patches, so I'm introducing a new io_canceled flag. That's because scsi_req_data is a synchronous callback and the enqueued flag might be reset by the time it returns. scsi-disk cannot unref the request until after calling scsi_req_data. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hw/scsi.h')
-rw-r--r--hw/scsi.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/scsi.h b/hw/scsi.h
index 8ea744a392..fcc345581d 100644
--- a/hw/scsi.h
+++ b/hw/scsi.h
@@ -51,6 +51,7 @@ struct SCSIRequest {
uint8_t sense[SCSI_SENSE_BUF_SIZE];
uint32_t sense_len;
bool enqueued;
+ bool io_canceled;
void *hba_private;
QTAILQ_ENTRY(SCSIRequest) next;
};