ChangeSet 1.1557.49.14, 2004/02/17 16:45:00-08:00, [EMAIL PROTECTED]
[PATCH] USB Storage: Reduce unsolicited auto-sense
This patch (a regeneration of as185) reduces the amount of auto-sensing we
do even further. It also zeros-out the sense buffer in those cases where
we do auto-sense and get back no error.
drivers/usb/storage/transport.c | 34 ++++++++++++----------------------
1 files changed, 12 insertions(+), 22 deletions(-)
diff -Nru a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
--- a/drivers/usb/storage/transport.c Thu Feb 19 17:21:57 2004
+++ b/drivers/usb/storage/transport.c Thu Feb 19 17:21:57 2004
@@ -552,6 +552,8 @@
return;
}
+ srb->result = SAM_STAT_GOOD;
+
/* Determine if we need to auto-sense
*
* I normally don't use a flag like this, but it's almost impossible
@@ -582,8 +584,8 @@
}
/*
- * Also, if we have a short transfer on a command that can't have
- * a short transfer, we're going to do this.
+ * A short transfer on a command where we don't expect it
+ * is unusual, but it doesn't mean we need to auto-sense.
*/
if ((srb->resid > 0) &&
!((srb->cmnd[0] == REQUEST_SENSE) ||
@@ -592,7 +594,6 @@
(srb->cmnd[0] == LOG_SENSE) ||
(srb->cmnd[0] == MODE_SENSE_10))) {
US_DEBUGP("-- unexpectedly short transfer\n");
- need_auto_sense = 1;
}
/* Now, if we need to do the auto-sense, let's do it */
@@ -693,26 +694,15 @@
/* set the result so the higher layers expect this data */
srb->result = SAM_STAT_CHECK_CONDITION;
- /* If things are really okay, then let's show that */
- if ((srb->sense_buffer[2] & 0xf) == 0x0)
+ /* If things are really okay, then let's show that. Zero
+ * out the sense buffer so the higher layers won't realize
+ * we did an unsolicited auto-sense. */
+ if (result == USB_STOR_TRANSPORT_GOOD &&
+ (srb->sense_buffer[2] & 0xf) == 0x0) {
srb->result = SAM_STAT_GOOD;
- } else /* if (need_auto_sense) */
- srb->result = SAM_STAT_GOOD;
-
- /* Regardless of auto-sense, if we _know_ we have an error
- * condition, show that in the result code
- */
- if (result == USB_STOR_TRANSPORT_FAILED)
- srb->result = SAM_STAT_CHECK_CONDITION;
-
- /* If we think we're good, then make sure the sense data shows it.
- * This is necessary because the auto-sense for some devices always
- * sets byte 0 == 0x70, even if there is no error
- */
- if ((us->protocol == US_PR_CB || us->protocol == US_PR_DPCM_USB) &&
- (result == USB_STOR_TRANSPORT_GOOD) &&
- ((srb->sense_buffer[2] & 0xf) == 0x0))
- srb->sense_buffer[0] = 0x0;
+ srb->sense_buffer[0] = 0x0;
+ }
+ }
return;
/* abort processing: the bulk-only transport requires a reset
-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id56&alloc_id438&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel