If we succeed, we should report that.

Signed-off-by: Oliver Neukum <[email protected]>
---
 drivers/usb/storage/uas.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index d388e78..31ff1a0 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -57,6 +57,7 @@ struct uas_dev_info {
        spinlock_t lock;
        struct work_struct work;
        struct completion deathknell;
+       bool aborted;
 };
 
 enum {
@@ -257,8 +258,20 @@ static void uas_xfer_data(struct urb *urb, struct 
scsi_cmnd *cmnd,
        }
 }
 
-static void finish_tmf(struct uas_dev_info *devinfo, struct response_iu *riu)
+static void finish_tmf(struct uas_dev_info *devinfo, struct response_iu *riu, 
struct scsi_cmnd *cmnd)
 {
+       u8 response_code = riu->response_code;
+
+       /*
+        * We have a valid finished TMF and now need to check
+        * for the result of the operation
+        */
+       uas_log_cmd_state(cmnd, "expected response iu", response_code);
+
+       if (response_code == RC_TMF_SUCCEEDED)
+               devinfo->aborted = true;
+       else
+               devinfo->aborted = false;
 }
 
 static bool uas_evaluate_response_iu(struct response_iu *riu, struct scsi_cmnd 
*cmnd)
@@ -385,7 +398,7 @@ static void uas_stat_cmplt(struct urb *urb)
                cmdinfo = (void *)&cmnd->SCp;
                switch (iu->iu_id) {
                case IU_ID_RESPONSE:
-                       finish_tmf(devinfo, (struct response_iu *)iu);
+                       finish_tmf(devinfo, (struct response_iu *)iu, cmnd);
                        break;
                case IU_ID_STATUS:
                case IU_ID_READ_READY:
@@ -810,7 +823,7 @@ static int uas_eh_abort_handler(struct scsi_cmnd *cmnd)
        time = wait_for_completion_timeout(&devinfo->deathknell, 
USB_CTRL_GET_TIMEOUT);
        /* in case of timeout */
        usb_kill_urb(devinfo->management_urb);
-       if (time) {
+       if (time && devinfo->aborted) {
                cmdinfo->state &= ~COMMAND_ABORTING;
                /*
                 * manually finish as resources must be freed only once
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to