mirror of https://github.com/xemu-project/xemu.git
usb-storage: don't try to send the status early.
Until recently all scsi commands sent to scsi-disk did either transfer data or finished instantly. The correct implementation of SYNCRONIZE_CACHE changed the picture though, and usb-storage needs a fix to handle that case correctly.
This commit is contained in:
parent
414c460431
commit
5931065907
10
hw/usb-msd.c
10
hw/usb-msd.c
|
@ -378,9 +378,7 @@ static int usb_msd_handle_data(USBDevice *dev, USBPacket *p)
|
||||||
s->scsi_len = 0;
|
s->scsi_len = 0;
|
||||||
s->req = scsi_req_new(s->scsi_dev, tag, 0, cbw.cmd, NULL);
|
s->req = scsi_req_new(s->scsi_dev, tag, 0, cbw.cmd, NULL);
|
||||||
scsi_req_enqueue(s->req);
|
scsi_req_enqueue(s->req);
|
||||||
/* ??? Should check that USB and SCSI data transfer
|
if (s->req && s->req->cmd.xfer != SCSI_XFER_NONE) {
|
||||||
directions match. */
|
|
||||||
if (s->mode != USB_MSDM_CSW && s->residue == 0) {
|
|
||||||
scsi_req_continue(s->req);
|
scsi_req_continue(s->req);
|
||||||
}
|
}
|
||||||
ret = p->result;
|
ret = p->result;
|
||||||
|
@ -439,9 +437,15 @@ static int usb_msd_handle_data(USBDevice *dev, USBPacket *p)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s->req) {
|
||||||
|
/* still in flight */
|
||||||
|
s->packet = p;
|
||||||
|
ret = USB_RET_ASYNC;
|
||||||
|
} else {
|
||||||
usb_msd_send_status(s, p);
|
usb_msd_send_status(s, p);
|
||||||
s->mode = USB_MSDM_CBW;
|
s->mode = USB_MSDM_CBW;
|
||||||
ret = 13;
|
ret = 13;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case USB_MSDM_DATAIN:
|
case USB_MSDM_DATAIN:
|
||||||
|
|
Loading…
Reference in New Issue