Errors on USB-storage device are ignored.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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;



-- 
** R.E.Wolff@xxxxxxxxxxxx ** 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux