On Tue, 26 Aug 2003, Uberto Barbini wrote: > >> I'm a bit tired of blind suggestions, so I'll be grateful if someone gives > >> me any hint on how usb-storage is supposed to work and I'm glad to do some > >> debug on c code if necessary. > > BU> Trying configuring usb-storage debugging on, and post a copy of the > BU> debugging messages that appear in your system log when you plug in your > BU> usb-key. > > Thanks, I append my logs with usbkey and CF reader. > > Note also that I'm having acpi problems with test4 and my rhine net > card (you can see the interupt conflicts) but CF still works and > usbkey still don't.
The log you attached doesn't contain any debugging information. Probably you have your /etc/syslog.conf set up only to accept kernel messages with higher priority. Judging from what is in there, my guess is that your usb-key doesn't like the MODE_SENSE command to read the cache page. Try applying the patch below and see if it helps. If it doesn't, change syslog.conf to accept _all_ kernel messages and post the resulting kernel log. Alan Stern ===== sd.c 1.52 vs edited ===== --- 1.52/drivers/scsi/sd.c Tue Jul 1 17:54:19 2003 +++ edited/drivers/scsi/sd.c Thu Jul 31 11:05:01 2003 @@ -1080,6 +1080,7 @@ sd_read_write_protect_flag(struct scsi_disk *sdkp, char *diskname, struct scsi_request *SRpnt, unsigned char *buffer) { int res; + const int dbd = 0; /* Some devices don't like DBD */ struct scsi_mode_data data; /* @@ -1087,7 +1088,7 @@ * We have to start carefully: some devices hang if we ask * for more than is available. */ - res = sd_do_mode_sense(SRpnt, 0, 0x3F, buffer, 4, &data); + res = sd_do_mode_sense(SRpnt, dbd, 0x3F, buffer, 4, &data); /* * Second attempt: ask for page 0 @@ -1095,13 +1096,13 @@ * Sense Key 5: Illegal Request, Sense Code 24: Invalid field in CDB. */ if (!scsi_status_is_good(res)) - res = sd_do_mode_sense(SRpnt, 0, 0, buffer, 4, &data); + res = sd_do_mode_sense(SRpnt, dbd, 0, buffer, 4, &data); /* * Third attempt: ask 255 bytes, as we did earlier. */ if (!scsi_status_is_good(res)) - res = sd_do_mode_sense(SRpnt, 0, 0x3F, buffer, 255, &data); + res = sd_do_mode_sense(SRpnt, dbd, 0x3F, buffer, 255, &data); if (!scsi_status_is_good(res)) { printk(KERN_WARNING @@ -1124,7 +1125,7 @@ struct scsi_request *SRpnt, unsigned char *buffer) { int len = 0, res; - const int dbd = 0; /* DBD */ + const int dbd = 0; /* Some devices don't like DBD */ const int modepage = 0x08; /* current values, cache page */ struct scsi_mode_data data; @@ -1134,10 +1135,11 @@ if (scsi_status_is_good(res)) { /* that went OK, now ask for the proper length */ - len = data.length; - if (len > 128) - len = 128; - res = sd_do_mode_sense(SRpnt, dbd, modepage, buffer, + len = data.header_length + data.block_descriptor_length + 4; + if (len > 512) + res = SAM_STAT_BUSY; + else + res = sd_do_mode_sense(SRpnt, dbd, modepage, buffer, len, &data); } ------------------------------------------------------- This sf.net email is sponsored by:ThinkGeek Welcome to geek heaven. http://thinkgeek.com/sf _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel