UAS: also check for ESHUTDOWN in error reporting
authorOliver Neukum <oneukum@suse.com>
Mon, 24 Aug 2015 09:10:43 +0000 (11:10 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 4 Oct 2015 09:45:11 +0000 (10:45 +0100)
-ESHUTDOWN means that the HC has been unplugged.
Reporting an error in that case makes no sense.

Signed-off-by: Oliver Neukum <oneukum@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/storage/uas.c

index f689219095526a76076010eee2d1e3df82fa8e73..48ca9c204354168f079a1e9e5ceaf2ac4b74a0f5 100644 (file)
@@ -257,17 +257,16 @@ static void uas_stat_cmplt(struct urb *urb)
        struct uas_cmd_info *cmdinfo;
        unsigned long flags;
        unsigned int idx;
+       int status = urb->status;
 
        spin_lock_irqsave(&devinfo->lock, flags);
 
        if (devinfo->resetting)
                goto out;
 
-       if (urb->status) {
-               if (urb->status != -ENOENT && urb->status != -ECONNRESET) {
-                       dev_err(&urb->dev->dev, "stat urb: status %d\n",
-                               urb->status);
-               }
+       if (status) {
+               if (status != -ENOENT && status != -ECONNRESET && status != -ESHUTDOWN)
+                       dev_err(&urb->dev->dev, "stat urb: status %d\n", status);
                goto out;
        }
 
@@ -348,6 +347,7 @@ static void uas_data_cmplt(struct urb *urb)
        struct uas_dev_info *devinfo = (void *)cmnd->device->hostdata;
        struct scsi_data_buffer *sdb = NULL;
        unsigned long flags;
+       int status = urb->status;
 
        spin_lock_irqsave(&devinfo->lock, flags);
 
@@ -374,9 +374,9 @@ static void uas_data_cmplt(struct urb *urb)
                goto out;
        }
 
-       if (urb->status) {
-               if (urb->status != -ENOENT && urb->status != -ECONNRESET)
-                       uas_log_cmd_state(cmnd, "data cmplt err", urb->status);
+       if (status) {
+               if (status != -ENOENT && status != -ECONNRESET && status != -ESHUTDOWN)
+                       uas_log_cmd_state(cmnd, "data cmplt err", status);
                /* error: no data transfered */
                sdb->resid = sdb->length;
        } else {