Commit 618cb2b6 authored by Andries E. Brouwer's avatar Andries E. Brouwer Committed by Linus Torvalds

[PATCH] sddr09.c MODE SENSE fixes

Teach usb/storage/sddr09.c how to return less than a full page of sense
data.
parent e91004e8
...@@ -1443,36 +1443,27 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us) ...@@ -1443,36 +1443,27 @@ int sddr09_transport(Scsi_Cmnd *srb, struct us_data *us)
} }
if (srb->cmnd[0] == MODE_SENSE) { if (srb->cmnd[0] == MODE_SENSE) {
int modepage = (srb->cmnd[2] & 0x3F);
int len;
// Read-write error recovery page: there needs to /* They ask for the Read/Write error recovery page,
// be a check for write-protect here 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 0x%x\n", modepage);
US_DEBUGP(
"SDDR09: Dummy up request for mode page 1\n");
if (ptr == NULL || if (ptr == NULL)
srb->request_bufflen<sizeof(mode_page_01))
return USB_STOR_TRANSPORT_ERROR; 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[0] = sizeof(mode_page_01) - 1;
mode_page_01[2] = (info->flags & SDDR09_WP) ? 0x80 : 0; 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; 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; return USB_STOR_TRANSPORT_ERROR;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment