On Sat, 8 Jan 2005, Srihari Vijayaraghavan wrote:

> Alan,
> 
> I have made a couple of observations:
> 1. While it is still easy to trigger this bug without USB Storage Debug 
> Option 
> in vanilla 2.6.10, I cannot reproduce the bug with debug option. Perhaps it 
> changes some timings.

Certainly it changes timings.

> (Without debug option, within a dozen plug/unplug events I can reliably 
> trigger the bug, but OTOH with debug options I cannot even after 50 events. 
> Maybe I should run my desktop with debug option for better stability. :-))
> 
> 2. When running without debug option, the D state "hald" process appears 
> first, and upon unplugging the drive an OOPS appears on the very next 
> plugging of the drive.

It sounds like the problem occurs in hald, and the later oops is just a 
symptom whose cause came much earlier.

> Here is the new OOPS:
> 
> usb-storage: device found at 7
> usb-storage: waiting for device to settle before scanning
> Unable to handle kernel paging request at 0000001600000019 RIP:
> <ffffffffa0108259>{:usb_storage:bus_reset+73}

I don't suppose you're familiar enough with 64-bit assembler to be able to 
decode the low-level instruction listing and tell me which line of the 
bus_reset routine corresponds to offset 73?

Failing that, maybe you can try applying this patch.  It will print some 
extra debugging information in the system log, even with 
CONFIG_USB_STORAGE_DEBUG not set.

Alan Stern



--- 2.6.10-orig/drivers/usb/storage/scsiglue.c  Mon Jan  3 09:39:36 2005
+++ 2.6.10/drivers/usb/storage/scsiglue.c       Fri Jan  7 22:59:51 2005
@@ -268,9 +268,15 @@
 /* This is always called with scsi_lock(srb->host) held */
 static int bus_reset(struct scsi_cmnd *srb)
 {
-       struct us_data *us = (struct us_data *)srb->device->host->hostdata[0];
+       struct us_data *us;
        int result, rc;
 
+       printk(KERN_INFO "In bus_reset, srb: %p\n", srb);
+       printk("  device: %p\n", srb->device);
+       printk("  host: %p\n", srb->device->host);
+       printk("  hostdata: %p\n", (void *) srb->device->host->hostdata[0]);
+
+       us = (struct us_data *)srb->device->host->hostdata[0];
        US_DEBUGP("%s called\n", __FUNCTION__);
 
        scsi_unlock(srb->device->host);



-------------------------------------------------------
The SF.Net email is sponsored by: Beat the post-holiday blues
Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek.
It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to