Martin -- What you've found is an issue I'm still trying to find the best solution to.
The Linux-SCSI people (now on the CC:) have rejected the idea of making all
INQUIRYs 36-bytes. Apparently, there are some HBA drivers which want to
snoop the INQUIRY data in the vendor-specific area for some reason.
Of course, your fix to limit all INQUIRYs processed by the usb-storage
layer prevents userspace applications from issuing a longer INQUIRY. I've
run across a few apps that look for a device based on 36-byte INQUIRY
commands, and then send a longer INQUIRY reuest only after identifying a
device that it knows supports such things.
I'm thinking that the best solution is to have the SCSI layer send a
36-byte INQUIRY to probe if the low-level driver has the 'emulation' flag
set.... that will also nicely cover the IEEE1394 people, who have been
facing the same problem.
Of course, I don't know if the linux-SCSI people will accept that idea.
Matt
On Thu, Feb 07, 2002 at 12:52:52AM +0100, Martin Wilck wrote:
>
> Hi,
>
> I recently bought the above device (07c4/a400/113).
> It is a CompactFlash + Microdrive Reader.
> Seems to be so new that it is in no hardware darta base yet.
>
> Couldn't get it to work on Linux first
> (nor with bulk transport nor with datafab transport).
>
> After some playing with usb-robot and usb-snoopy,
> I found the problem: the INQUIRY command passed
> to the device (with bulk transport) requests 255 bytes
> of information. This causes the device to go crazy, because
> it has only 36 bytes to deliver, and I get only timeouts after that.
>
> By changing the transfer length of the INQUIRY command to the
> minimum value 36, I got all my problems solved.
>
> I just put
>
> if (srb->cmnd[0] == INQUIRY)
> srb->cmnd[4] = 36;
>
> at the head of usb_stor_transparent_scsi_command().
>
> Of course that is the Wrong Thing (TM) in general.
>
> But it might be worthwile to consider requesting 36 bytes only in the
> first place, and then examine the "Additional Length" field in the data
> returned to see if it is >32. If yes, the INQUIRY could be repeated
> with a larger transfer length.
>
> If desired, I can try to write a reasonable patch for that.
>
> Martin
>
> PS: I haven't analyzed what goes wrong with the datafab transport
> protocol, but it was more or less disastrous. The INQUIRY went fine,
> but any attempt to load sd_mod resulted in kernel OOPSes.
>
> Anyway if Bulk works, no need to use datafab-specific transport,
> right?
>
> PS2:�During my testing with USB-Snoopy, I saw that the Win2k driver
> (native) sends SCSI command 0x23 to the device (unsuccessfully,
> the device signals ILLEGAL REQUEST).
> What command is that? I found it in no command reference.
>
> --
> Martin Wilck <[EMAIL PROTECTED]>
> Physicist & Linux system engineer at FSC <[EMAIL PROTECTED]>
>
--
Matthew Dharm Home: [EMAIL PROTECTED]
Maintainer, Linux USB Mass Storage Driver
Why am I talking to a toilet brush?
-- CEO
User Friendly, 4/30/1998
msg04489/pgp00000.pgp
Description: PGP signature
