ChangeSet 1.855.9.11, 2002/11/05 11:17:12-08:00, [EMAIL PROTECTED]

[PATCH] USB storage: fix result code checks

This patch fixes up some result-code tests that were missed in previous
patches.


diff -Nru a/drivers/usb/storage/freecom.c b/drivers/usb/storage/freecom.c
--- a/drivers/usb/storage/freecom.c     Tue Nov  5 16:10:21 2002
+++ b/drivers/usb/storage/freecom.c     Tue Nov  5 16:10:21 2002
@@ -127,7 +127,7 @@
         /* Issue the transfer command. */
         result = usb_stor_bulk_msg (us, fxfr, opipe,
                         FCM_PACKET_LENGTH, &partial);
-        if (result != 0) {
+        if (result != USB_STOR_XFER_GOOD) {
                 US_DEBUGP ("Freecom readdata xpot failure: r=%d, p=%d\n",
                                 result, partial);
 
@@ -146,7 +146,9 @@
        result = usb_stor_bulk_transfer_srb(us, ipipe, srb, count);
         US_DEBUGP("freecom_readdata done!\n");
 
-        return result;
+       if (result > USB_STOR_XFER_SHORT)
+               return USB_STOR_TRANSPORT_ERROR;
+       return USB_STOR_TRANSPORT_GOOD;
 }
 
 static int
@@ -168,7 +170,7 @@
         /* Issue the transfer command. */
         result = usb_stor_bulk_msg (us, fxfr, opipe,
                         FCM_PACKET_LENGTH, &partial);
-        if (result != 0) {
+        if (result != USB_STOR_XFER_GOOD) {
                 US_DEBUGP ("Freecom writedata xpot failure: r=%d, p=%d\n",
                                 result, partial);
 
@@ -188,7 +190,9 @@
        result = usb_stor_bulk_transfer_srb(us, opipe, srb, count);
 
         US_DEBUGP("freecom_writedata done!\n");
-        return result;
+       if (result > USB_STOR_XFER_SHORT)
+               return USB_STOR_TRANSPORT_ERROR;
+       return USB_STOR_TRANSPORT_GOOD;
 }
 
 /*
@@ -231,7 +235,7 @@
         /* The Freecom device will only fail if there is something wrong in
          * USB land.  It returns the status in its own registers, which
          * come back in the bulk pipe. */
-        if (result != 0) {
+        if (result != USB_STOR_XFER_GOOD) {
                 US_DEBUGP ("freecom xport failure: r=%d, p=%d\n",
                                 result, partial);
 
@@ -255,6 +259,8 @@
                US_DEBUGP("freecom_transport(): transfer aborted\n");
                return USB_STOR_TRANSPORT_ABORTED;
        }
+       if (result != USB_STOR_XFER_GOOD)
+               return USB_STOR_TRANSPORT_ERROR;
 
         US_DEBUG(pdump ((void *) fst, partial));
 
@@ -284,7 +290,7 @@
                 * wrong in USB land.  It returns the status in its own
                 * registers, which come back in the bulk pipe.
                 */
-               if (result != 0) {
+               if (result != USB_STOR_XFER_GOOD) {
                        US_DEBUGP ("freecom xport failure: r=%d, p=%d\n",
                                        result, partial);
 
@@ -308,13 +314,14 @@
                        US_DEBUGP("freecom_transport(): transfer aborted\n");
                        return USB_STOR_TRANSPORT_ABORTED;
                }
+               if (result > USB_STOR_XFER_SHORT)
+                       return USB_STOR_TRANSPORT_ERROR;
 
                US_DEBUG(pdump ((void *) fst, partial));
        }
 
-        if (partial != 4 || result != 0) {
+        if (partial != 4)
                 return USB_STOR_TRANSPORT_ERROR;
-        }
         if ((fst->Status & 1) != 0) {
                 US_DEBUGP("operation failed\n");
                 return USB_STOR_TRANSPORT_FAILED;
@@ -369,7 +376,7 @@
                         US_DEBUGP ("freecom_transport: transfer aborted\n");
                         return USB_STOR_TRANSPORT_ABORTED;
                 }
-                if (partial != 4 || result != 0)
+                if (partial != 4 || result > USB_STOR_XFER_SHORT)
                         return USB_STOR_TRANSPORT_ERROR;
                 if ((fst->Status & ERR_STAT) != 0) {
                         US_DEBUGP("operation failed\n");
@@ -398,7 +405,7 @@
                         US_DEBUGP ("freecom_transport: transfer aborted\n");
                         return USB_STOR_TRANSPORT_ABORTED;
                 }
-                if (partial != 4 || result != 0)
+                if (partial != 4 || result > USB_STOR_XFER_SHORT)
                         return USB_STOR_TRANSPORT_ERROR;
                 if ((fst->Status & ERR_STAT) != 0) {
                         US_DEBUGP("operation failed\n");
diff -Nru a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c
--- a/drivers/usb/storage/isd200.c      Tue Nov  5 16:10:21 2002
+++ b/drivers/usb/storage/isd200.c      Tue Nov  5 16:10:21 2002
@@ -660,6 +660,8 @@
         switch (bcs.Status) {
         case US_BULK_STAT_OK:
                 /* command good -- note that we could be short on data */
+               if (srb->resid > 0)
+                       return ISD200_TRANSPORT_SHORT;
                 return ISD200_TRANSPORT_GOOD;
 
         case US_BULK_STAT_FAIL:
@@ -764,7 +766,8 @@
        }
 
        status = isd200_Bulk_transport(us, &srb, &ata, sizeof(ata.generic));
-       if (status != ISD200_TRANSPORT_GOOD) {
+       if (status != ISD200_TRANSPORT_GOOD &&
+                       status != ISD200_TRANSPORT_SHORT) {
                US_DEBUGP("   isd200_action(0x%02x) error: %d\n",action,status);
                status = ISD200_ERROR;
                /* need to reset device here */
@@ -846,6 +849,7 @@
                break;
 
        case ISD200_TRANSPORT_SHORT:
+               srb->result = GOOD << 1;
                if (!((srb->cmnd[0] == REQUEST_SENSE) ||
                      (srb->cmnd[0] == INQUIRY) ||
                      (srb->cmnd[0] == MODE_SENSE) ||
diff -Nru a/drivers/usb/storage/shuttle_usbat.c b/drivers/usb/storage/shuttle_usbat.c
--- a/drivers/usb/storage/shuttle_usbat.c       Tue Nov  5 16:10:21 2002
+++ b/drivers/usb/storage/shuttle_usbat.c       Tue Nov  5 16:10:21 2002
@@ -804,7 +804,8 @@
 
        result = usbat_read(us, USBAT_ATA, 0x17, &status);
        US_DEBUGP("Status = %02X\n", status);
-
+       if (result != USB_STOR_XFER_GOOD)
+               return USB_STOR_TRANSPORT_ERROR;
        if (srb->cmnd[0] == TEST_UNIT_READY)
                transferred = 0;
 


-------------------------------------------------------
This sf.net email is sponsored by: See the NEW Palm 
Tungsten T handheld. Power & Color in a compact size!
http://ads.sourceforge.net/cgi-bin/redirect.pl?palm0001en
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to