提交 5eb6d9e3 编写于 作者: H Hans de Goede 提交者: Gerd Hoffmann

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: NHans de Goede <hdegoede@redhat.com>
Signed-off-by: NGerd Hoffmann <kraxel@redhat.com>
上级 d4bfc7b9
...@@ -746,17 +746,14 @@ static void usb_uas_task(UASDevice *uas, uas_ui *ui) ...@@ -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) ...@@ -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: ...@@ -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);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册