diff options
author | Paolo Bonzini | 2011-10-25 12:53:33 +0200 |
---|---|---|
committer | Kevin Wolf | 2011-10-28 19:25:52 +0200 |
commit | e88c591d63ed1bc8520f4f276bebd77c22e4ec72 (patch) | |
tree | 5c12cbd48d40a4f27a7ea04dd4a2b04ef1485e8a /hw/scsi.h | |
parent | scsi: pass cdb to alloc_req (diff) | |
download | qemu-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.h | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -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; }; |