On Fri, 18 Sep 2009, Eric Ding wrote: > On 2009-09-17 21:38 +0800, Alan Stern indited: > > On Thu, 17 Sep 2009, Eric Ding wrote: > > > >> I'm using the mainline 2.6.31 kernel with an Olympus MAUSB-200 USB xD-Picture > >> Card reader and my Olympus 1GB Type H xD-Picture Card, and have had consistent > >> problems trying to access and use the card on my Linux system. This card > >> (reader) works perfectly fine with my Fujifilm F20 digicam and on my Windows XP > >> system, but on my Linux system, the usb-storage driver seems to have problems > >> even getting partition information for it. > >> > [original report trimmed] > >> I've included the output of lsusb -v and output from dmesg below. > > > > There isn't enough information in the log to tell what's wrong. We > > need to see a usbmon trace showing what happens when you plug the card > > reader in. > > No sweat, see below! Thanks again... The trace shows that the card has 2048000 sectors. A bunch of reads take place successfully (including a read of the very last sector). Then the following happens: > c0c19a80 2896898502 S Bo:1:006:2 -115 31 = 55534243 21000000 00800000 80000a28 00001f3f 18000040 00000000 000000 > c0c19a80 2896900170 C Bo:1:006:2 0 31 > > c0c25100 2896900400 S Bi:1:006:2 -115 4096 < > c0c25980 2896900428 S Bi:1:006:2 -115 4096 < > c0c25f80 2896900452 S Bi:1:006:2 -115 4096 < > c0c25b00 2896900474 S Bi:1:006:2 -115 4096 < > c0c25c80 2896900496 S Bi:1:006:2 -115 4096 < > c0c25680 2896900518 S Bi:1:006:2 -115 4096 < > c0c25880 2896900540 S Bi:1:006:2 -115 4096 < > c0c25f00 2896900562 S Bi:1:006:2 -115 4096 < The above is a command to read 64 sectors starting at sector 2047768. It should not cause any trouble. > c0c25100 2896911852 C Bi:1:006:2 0 4096 = ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff > c0c25980 2896911902 C Bi:1:006:2 0 4096 = ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff > c0c25f80 2927741370 C Bi:1:006:2 -32 0 > c0c25b00 2927741544 C Bi:1:006:2 -104 0 > c0c25c80 2927741609 C Bi:1:006:2 -104 0 > c0c25680 2927741642 C Bi:1:006:2 -104 0 > c0c25880 2927741740 C Bi:1:006:2 -104 0 > c0c25f00 2927741772 C Bi:1:006:2 -104 0 > c0c19a80 2927743940 S Co:1:006:0 s 02 01 0000 0082 0000 0 > c0c19a80 2927747654 C Co:1:006:0 0 0 > c0c19a80 2927747984 S Bi:1:006:2 -115 13 < > c0c19a80 2927750616 C Bi:1:006:2 0 13 = 55534253 21000000 00300000 01 The reader returns only 16 sectors' worth of data and then gets an error. > c0c19a80 2927751042 S Bo:1:006:2 -115 31 = 55534243 22000000 12000000 80000603 00000012 00000000 00000000 000000 > c0c19a80 2927752743 C Bo:1:006:2 0 31 > > ce91a900 2927753661 S Bi:1:006:2 -115 18 < > ce91a900 2927756528 C Bi:1:006:2 0 18 = 70000300 0000000a 00000000 11000000 0000 > c0c19a80 2927756632 S Bi:1:006:2 -115 13 < > c0c19a80 2927758558 C Bi:1:006:2 0 13 = 55534253 22000000 00000000 00 When asked for the cause of the error, the device says "Medium error: Unrecoverable read error" -- which is what showed up in the kernel log. But after this point no more reads worked. Every time the computer tried to read some data, the device would return nothing and report the same error status, even for sectors that had successfully been read earlier. Clearly there's a bug in the reader or the card. As for why it works under Windows, I can only guess it's because Windows doesn't try to read 64 sectors starting at sector 2047768. Perhaps if some Windows program tried to do so, the same failure would happen. Probably the Linux program that does the offending read is udev's vol_id. If you disable that then perhaps the reader won't crash. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html