]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] sddr09.c MODE SENSE fixes
authorAndries E. Brouwer <andries.brouwer@cwi.nl>
Tue, 3 Sep 2002 12:41:31 +0000 (05:41 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Tue, 3 Sep 2002 12:41:31 +0000 (05:41 -0700)
Teach usb/storage/sddr09.c how to return less than a full page of sense
data.

drivers/usb/storage/sddr09.c

index 74acfb08d9edcf430ac4f0096ddbf020fb65c694..ee1da8029fd180817531121c1b60236e08c6ce42 100644 (file)
@@ -1443,36 +1443,27 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us)
        }
 
        if (srb->cmnd[0] == MODE_SENSE) {
+               int modepage = (srb->cmnd[2] & 0x3F);
+               int len;
 
-               // Read-write error recovery page: there needs to
-               // be a check for write-protect here
+               /* They ask for the Read/Write error recovery page,
+                  or for all pages. Give as much as they have room for. */
+               if (modepage == 0x01 || modepage == 0x3F) {
 
-               if ( (srb->cmnd[2] & 0x3F) == 0x01 ) {
-
-                       US_DEBUGP(
-                               "SDDR09: Dummy up request for mode page 1\n");
+                       US_DEBUGP("SDDR09: Dummy up request for "
+                                 "mode page 0x%x\n", modepage);
 
-                       if (ptr == NULL || 
-                           srb->request_bufflen<sizeof(mode_page_01))
+                       if (ptr == NULL)
                                return USB_STOR_TRANSPORT_ERROR;
 
+                       len = srb->request_bufflen;
+                       if (len > sizeof(mode_page_01))
+                               len = sizeof(mode_page_01);
+
                        mode_page_01[0] = sizeof(mode_page_01) - 1;
                        mode_page_01[2] = (info->flags & SDDR09_WP) ? 0x80 : 0;
-                       memcpy(ptr, mode_page_01, sizeof(mode_page_01));
+                       memcpy(ptr, mode_page_01, len);
                        return USB_STOR_TRANSPORT_GOOD;
-
-               } else if ( (srb->cmnd[2] & 0x3F) == 0x3F ) {
-
-                       US_DEBUGP("SDDR09: Dummy up request for "
-                                 "all mode pages\n");
-
-                       if (ptr == NULL || 
-                           srb->request_bufflen<sizeof(mode_page_01))
-                               return USB_STOR_TRANSPORT_ERROR;
-
-                       memcpy(ptr, mode_page_01, sizeof(mode_page_01));
-                       return USB_STOR_TRANSPORT_GOOD;
-
                }
 
                return USB_STOR_TRANSPORT_ERROR;