From 5eb6d9e3ef1fac096ab5b3f5c14e1f4079dd7367 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Thu, 24 Oct 2013 18:15:51 +0100 Subject: 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 Signed-off-by: Gerd Hoffmann --- hw/usb/dev-uas.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) (limited to 'hw') diff --git a/hw/usb/dev-uas.c b/hw/usb/dev-uas.c index 36a75b2f49..12d79ef743 100644 --- a/hw/usb/dev-uas.c +++ b/hw/usb/dev-uas.c @@ -746,17 +746,14 @@ static void usb_uas_task(UASDevice *uas, uas_ui *ui) if (req) { goto overlapped_tag; } + if (dev == NULL) { + goto incorrect_lun; + } switch (ui->task.function) { case UAS_TMF_ABORT_TASK: task_tag = be16_to_cpu(ui->task.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); if (req && req->dev == dev) { 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: 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); usb_uas_queue_response(uas, tag, UAS_RC_TMF_COMPLETE, 0); break; @@ -787,11 +778,6 @@ overlapped_tag: usb_uas_queue_response(uas, req->tag, UAS_RC_OVERLAPPED_TAG, 0); 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: usb_uas_queue_response(uas, tag, UAS_RC_INCORRECT_LUN, 0); } -- cgit v1.2.3