Hi,

I have an usb-storage enclosure that houses a normal desktop 
harddrive. I have been wondering why disks in that enclosure 
seemed to be  having less errors than when connected to a 
normal IDE connector. 

The reason is: USB-storage is ignoring a hint that something is
wrong. Probably my enclosure is also not completely following specs, 
but Linux is ignoring the hint as well.... 

On hitting a bad block, the disk reports error. The USB converter
then reports "auto-sense-required", and this is carried out. However
at this point, my USB enclosure returns all-zeroes. This is
considered non-fatal by the kernel. 

I'm guessing not many people are testing these things with 
bad drives. So, I don't know wether or not other USB converters
handle this situation more gracefully. 

As a patch, I've decided to set the sense key to "vendor specific"
(9), and then no "additional sense" (0:0), if, and only if the device
didn't return any valid sense info. 

The rest of the kernel then correctly interprets the situation
as an IO error. 

        Roger Wolff. 

--- linux-2.6.20.3.clean/drivers/usb/storage/transport.c        2007-03-13 
19:27:08.000000000 +0100
+++ linux-2.6.20.3.kostunrix/drivers/usb/storage/transport.c    2007-08-16 
16:47:00.000000000 +0200
@@ -629,6 +629,14 @@
 
                /* let's clean up right away */
                memcpy(srb->sense_buffer, us->sensebuf, US_SENSE_SIZE);
+               if (((srb->sense_buffer[2]&0xf) == 0) &&
+                   (srb->sense_buffer[12] == 0) &&
+                   (srb->sense_buffer[13] == 0)) {
+                       /* Hmmmmm. The device requested sense, but then
+                          declined to give us more info.... -- REW */ 
+                       srb->sense_buffer[2] |= 0x09; /* Vendor specific */
+               }
+
                srb->resid = old_resid;
                srb->request_buffer = old_request_buffer;
                srb->request_bufflen = old_request_bufflen;



-- 
** [EMAIL PROTECTED] ** http://www.BitWizard.nl/ ** +31-15-2600998 **
**    Delftechpark 26 2628 XH  Delft, The Netherlands. KVK: 27239233    **
*-- BitWizard writes Linux device drivers for any device you may have! --*
Q: It doesn't work. A: Look buddy, doesn't work is an ambiguous statement. 
Does it sit on the couch all day? Is it unemployed? Please be specific! 
Define 'it' and what it isn't doing. --------- Adapted from lxrbot FAQ
-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to