Re: TYPE_RBC cache fixes (sbp2.c affected)

Stefan Richter
2006-02-21T19:56:08Z

Al Viro wrote:
> OK, I think I've seen one that does it. Behold the lossage:
>
> * bugger does, indeed, report itself to be type 0
> * OK, says sd_read_cache_type(). Page 8 for you, then.
> * so called "SCSI device" spits out...
> <drumroll> RBC page 6. Sans mode page headers.
>
> So we see 0x86 0x0b where the data length should've been. And bytes 3 and 2
> of device size where the block descriptors size should've been. Since sd.c
> doesn't expect that level of idiocy (it should, but...) we adjust length
> down from ~34000 to 20 _and_ blindly add block descriptors size. Or what
> we assume to be one.
>
> Then we proceed to call scsi_mode_sense() with buffer created by kmalloc(512,
> GFP_DMA) and len... well, anywhere up to 64Kb. One of the first things it
> does is memset(buffer, 0, len).

Thanks a lot for the investigation & explanation.

> That's an Initio bridge, BTW. I suspect that the best we can do is to
> blacklist the little shit with "don't trust that one, it's really type 14".
> If it reacts to request for page 6 in a saner fashion, that is...

2.6.16-rc4-mm1's sbp2 already detects most of the Initio bridges and
flags them with skip_ms_page_8. It does so based on the
firmware_revision config ROM entry. This seems to catch most Initio
bridges but there was at least one report of a different
firmware_revision key value. However all of them feature "Initio" as
vendor string. I suppose I should let sbp2_slave_configure check for
this string in sdev->vendor and for sdev->type == TYPE_DISK, then bend
sdev->type to TYPE_RBC. (Or set skip_ms_page_8; I will check how my disk
behaves when forced to TYPE_RBC...)
--
Stefan Richter
-=====-=-==- --=- =-=-=
http://arcgraph.de/sr/

-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!