<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">ChangeSet 1.1033, 2003/03/06 13:45:25-08:00, stern@rowland.harvard.edu

[PATCH] USB: Patch for auto-sense cmd_len

This patch fixes an oversight in usb-storage whereby the command length
and command buffer for an automatically-generated REQUEST-SENSE command
would not be initialized properly.


 drivers/usb/storage/transport.c |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)


diff -Nru a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
--- a/drivers/usb/storage/transport.c	Thu Mar  6 14:19:41 2003
+++ b/drivers/usb/storage/transport.c	Thu Mar  6 14:19:41 2003
@@ -700,20 +700,26 @@
 		unsigned short old_sg;
 		unsigned old_request_bufflen;
 		unsigned char old_sc_data_direction;
+		unsigned char old_cmd_len;
 		unsigned char old_cmnd[MAX_COMMAND_SIZE];
 
 		US_DEBUGP("Issuing auto-REQUEST_SENSE\n");
 
 		/* save the old command */
 		memcpy(old_cmnd, srb-&gt;cmnd, MAX_COMMAND_SIZE);
+		old_cmd_len = srb-&gt;cmd_len;
 
 		/* set the command and the LUN */
+		memset(srb-&gt;cmnd, 0, MAX_COMMAND_SIZE);
 		srb-&gt;cmnd[0] = REQUEST_SENSE;
 		srb-&gt;cmnd[1] = old_cmnd[1] &amp; 0xE0;
-		srb-&gt;cmnd[2] = 0;
-		srb-&gt;cmnd[3] = 0;
 		srb-&gt;cmnd[4] = 18;
-		srb-&gt;cmnd[5] = 0;
+
+		/* FIXME: we must do the protocol translation here */
+		if (us-&gt;subclass == US_SC_RBC || us-&gt;subclass == US_SC_SCSI)
+			srb-&gt;cmd_len = 6;
+		else
+			srb-&gt;cmd_len = 12;
 
 		/* set the transfer direction */
 		old_sc_data_direction = srb-&gt;sc_data_direction;
@@ -739,6 +745,7 @@
 		srb-&gt;request_bufflen = old_request_bufflen;
 		srb-&gt;use_sg = old_sg;
 		srb-&gt;sc_data_direction = old_sc_data_direction;
+		srb-&gt;cmd_len = old_cmd_len;
 		memcpy(srb-&gt;cmnd, old_cmnd, MAX_COMMAND_SIZE);
 
 		if (temp_result == USB_STOR_TRANSPORT_ABORTED) {
</pre></body></html>