mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 18:23:57 -06:00
scsi: pass residual amount to command_complete
With the upcoming sglist support, HBAs will not see any transfer_data call and will not have a way to detect short transfers. So pass the residual amount of data upon command completion. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
da22132752
commit
01e9545588
6 changed files with 15 additions and 9 deletions
|
@ -533,6 +533,8 @@ SCSIRequest *scsi_req_new(SCSIDevice *d, uint32_t tag, uint32_t lun,
|
|||
}
|
||||
|
||||
req->cmd = cmd;
|
||||
req->resid = req->cmd.xfer;
|
||||
|
||||
switch (buf[0]) {
|
||||
case INQUIRY:
|
||||
trace_scsi_inquiry(d->id, lun, tag, cmd.buf[1], cmd.buf[2]);
|
||||
|
@ -1275,10 +1277,12 @@ void scsi_req_data(SCSIRequest *req, int len)
|
|||
{
|
||||
if (req->io_canceled) {
|
||||
trace_scsi_req_data_canceled(req->dev->id, req->lun, req->tag, len);
|
||||
} else {
|
||||
trace_scsi_req_data(req->dev->id, req->lun, req->tag, len);
|
||||
req->bus->info->transfer_data(req, len);
|
||||
return;
|
||||
}
|
||||
trace_scsi_req_data(req->dev->id, req->lun, req->tag, len);
|
||||
assert(req->cmd.mode != SCSI_XFER_NONE);
|
||||
req->resid -= len;
|
||||
req->bus->info->transfer_data(req, len);
|
||||
}
|
||||
|
||||
void scsi_req_print(SCSIRequest *req)
|
||||
|
@ -1337,7 +1341,7 @@ void scsi_req_complete(SCSIRequest *req, int status)
|
|||
|
||||
scsi_req_ref(req);
|
||||
scsi_req_dequeue(req);
|
||||
req->bus->info->complete(req, req->status);
|
||||
req->bus->info->complete(req, req->status, req->resid);
|
||||
scsi_req_unref(req);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue