mirror of https://gitee.com/openkylin/qemu.git
uas: Fix / cleanup usb_uas_task error handling
-The correct error if we cannot find the dev is INCORRECT_LUN rather then INVALID_INFO_UNIT -Move the device not found check to the top so we only need to do it once -Remove the dev->lun != lun checks, dev is returned by scsi_device_find which searches by lun, so this will never trigger Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
parent
d4bfc7b9f3
commit
5eb6d9e3ef
|
@ -746,17 +746,14 @@ static void usb_uas_task(UASDevice *uas, uas_ui *ui)
|
||||||
if (req) {
|
if (req) {
|
||||||
goto overlapped_tag;
|
goto overlapped_tag;
|
||||||
}
|
}
|
||||||
|
if (dev == NULL) {
|
||||||
|
goto incorrect_lun;
|
||||||
|
}
|
||||||
|
|
||||||
switch (ui->task.function) {
|
switch (ui->task.function) {
|
||||||
case UAS_TMF_ABORT_TASK:
|
case UAS_TMF_ABORT_TASK:
|
||||||
task_tag = be16_to_cpu(ui->task.task_tag);
|
task_tag = be16_to_cpu(ui->task.task_tag);
|
||||||
trace_usb_uas_tmf_abort_task(uas->dev.addr, tag, task_tag);
|
trace_usb_uas_tmf_abort_task(uas->dev.addr, tag, task_tag);
|
||||||
if (dev == NULL) {
|
|
||||||
goto bad_target;
|
|
||||||
}
|
|
||||||
if (dev->lun != lun) {
|
|
||||||
goto incorrect_lun;
|
|
||||||
}
|
|
||||||
req = usb_uas_find_request(uas, task_tag);
|
req = usb_uas_find_request(uas, task_tag);
|
||||||
if (req && req->dev == dev) {
|
if (req && req->dev == dev) {
|
||||||
scsi_req_cancel(req->req);
|
scsi_req_cancel(req->req);
|
||||||
|
@ -766,12 +763,6 @@ static void usb_uas_task(UASDevice *uas, uas_ui *ui)
|
||||||
|
|
||||||
case UAS_TMF_LOGICAL_UNIT_RESET:
|
case UAS_TMF_LOGICAL_UNIT_RESET:
|
||||||
trace_usb_uas_tmf_logical_unit_reset(uas->dev.addr, tag, lun);
|
trace_usb_uas_tmf_logical_unit_reset(uas->dev.addr, tag, lun);
|
||||||
if (dev == NULL) {
|
|
||||||
goto bad_target;
|
|
||||||
}
|
|
||||||
if (dev->lun != lun) {
|
|
||||||
goto incorrect_lun;
|
|
||||||
}
|
|
||||||
qdev_reset_all(&dev->qdev);
|
qdev_reset_all(&dev->qdev);
|
||||||
usb_uas_queue_response(uas, tag, UAS_RC_TMF_COMPLETE, 0);
|
usb_uas_queue_response(uas, tag, UAS_RC_TMF_COMPLETE, 0);
|
||||||
break;
|
break;
|
||||||
|
@ -787,11 +778,6 @@ overlapped_tag:
|
||||||
usb_uas_queue_response(uas, req->tag, UAS_RC_OVERLAPPED_TAG, 0);
|
usb_uas_queue_response(uas, req->tag, UAS_RC_OVERLAPPED_TAG, 0);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bad_target:
|
|
||||||
/* FIXME: correct? [see long comment in usb_uas_command()] */
|
|
||||||
usb_uas_queue_response(uas, tag, UAS_RC_INVALID_INFO_UNIT, 0);
|
|
||||||
return;
|
|
||||||
|
|
||||||
incorrect_lun:
|
incorrect_lun:
|
||||||
usb_uas_queue_response(uas, tag, UAS_RC_INCORRECT_LUN, 0);
|
usb_uas_queue_response(uas, tag, UAS_RC_INCORRECT_LUN, 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue