Flash memory problem
A message that is not in the archive (sent off-list or not yet received): 002901c6cae6$38b36e90$94403bd5@server
Quoted 4 lines · Anton Litvinov
Hello.
Quoted 1 line
Quoted 8 lines
Quoted 5 lines
The major difference was that Windows didn't use the PREVENT-ALLOW MEDIUM REMOVAL command. So once you get that patch integrated into the driver and use it properly, there's a good change the device will work.
Alan Stern
I applied a patch and that is what dmesg saying after plugging USB flash :
... device crashes while reading the partition table ...
Quoted 2 lines
Then LED is blinking and lsusb is blocking console until USB flash is unplugged.
Here is a summary of all the SCSI commands from your capture logs in both Linux and Windows (all commands are for lun 0 unless otherwise noted):
Linux:
INQUIRY
TEST UNIT READY (failed: Not ready to ready change) TEST UNIT READY
READ CAPACITY
MODE SENSE 3f
TEST UNIT READY
TEST UNIT READY
READ CAPACITY
MODE SENSE 3f
READ(10) 8 sectors at 0 -- crashed
Windows:
INQUIRY
READ FORMAT CAPACITIES (failed: Not ready to ready change) READ FORMAT CAPACITIES
INQUIRY lun 1
READ FORMAT CAPACITIES lun 1 (failed: Not ready to ready change) READ FORMAT CAPACITIES lun 1
READ CAPACITY
READ(10) 1 sector at 0
MODE SENSE 1c
MODE SENSE 3f
READ CAPACITY
READ CAPACITY
READ(10) 1 sector at 0
READ(10) 1 sector at 0
READ CAPACITY
READ CAPACITY
READ(10) 1 sector at 0
READ CAPACITY lun 1
READ(10) lun 1, 1 sector at 0
MODE SENSE 1c lun 1
MODE SENSE 3f lun 1
READ CAPACITY lun 1
READ CAPACITY lun 1
READ(10) lun 1, 1 sector at 0
READ(10) lun 1, 1 sector at 0
READ CAPACITY lun 1
READ CAPACITY lun 1
READ(10) lun 1, 1 sector at 0
TEST UNIT READY
TEST UNIT READY lun 1
TEST UNIT READY
READ CAPACITY
READ CAPACITY
READ(10) 8 sectors at 32
The main differences are:
Windows uses READ FORMAT CAPACITIES and Linux doesn't. I doubt that this will make any difference.
Windows sends INQUIRY and READ FORMAT CAPACITIES for lun 1 before doing anything more on lun 0. It's possible that this matters, but I don't think so.
Windows sends MODE SENSE with page code 0x1c and Linux doesn't. Again, I doubt this will make any difference.
Windows repeats lots of commands many times. This shouldn't matter either.
Windows reads 1 sector starting at sector 0 whereas Linux tries to read 8 sectors starting at sector 0 -- and when Linux sent that command, the device crashed.
There can be little question that the last difference is the important one.
There was no obvious reason for the device to crash when it did. Perhaps it just doesn't like to send any other sectors along with sector 0. If that's true, the device is in violation of the SCSI standards (although to be fair, it doesn't claim to be compliant with the standards).
Sector 0 contains the partition table. Naturally it is the first sector to be read. In principle no more than one sector's worth of data is needed, but Linux almost always tries to read data in multiples of 4 KB (8 sectors). I don't know any way to force Linux to do a 1-sector read of sector 0 instead of an 8-sector read.
Maybe someone on one of the mailing lists can offer a suggestion. As far as I can see, Linux simply can't use this device.
Alan Stern