Re: [Bugme-new] [Bug 8561] New: list_add corruption. prev->next should be next (f7d28794), but was f0df8ed4

Alan Stern <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
On Fri, 1 Jun 2007, Andrew Morton wrote:

> > I'm using vanilla kernel 2.6.22-rc3 (and I try'ed with 2.6.21-fc7 fedora 
> > kernel) with a huawei e220 3g, and when I open amule after sometime kernel 
> > panics: 
> > _
> > list_add corruption. prev->next should be next (f7d28794), but was f0df8ed4 
> > (prev=f0df8ed4)
> > Kernel Bug at lib/list_debug.c:33

> > CPU: 0
> > EIP: 0060:[<c04ddda5>] Not tainted VLI
> > EFLAGS: 00010092 (2.6.22_rc3 #1)
> > EIP is at __list_add+0x48/0x5c
> > eax: 00000061___ebx: f0df8ed4___ecx: c06ced10___edx:00000086
> > esi: f0df8ed4___edi: 00000246___ebp: f7d28788___esp: c0750e68
> > ds: 007b________es: 007b________fs: 00d8________gs: 0033________ss: 0068
> > Process Amule (pid: 9719, ti=c0750000 task=d1da38b0 task.ti=c7899000)
> > Satck: _co69461e________f7d28794________f0df8ed4________f0df8ed4________f0df8ec0________ffffffff________c0558f09________
> > 00000040
> > ________00000021________f9316564________c180a120________00000000________d4884800________00000020________f7ece200________000000fc
> > ________f7a45000________db1c8000________00000001________00000040________f90b8da0________f7a45000________d3740000________c409e470
> > Call Trace:
> > ________[<c0558f09>] usb_hcd_sumit_urb+0x9a/0x778
> > ________[<f9316564>] ppp_async_push+0x38c/0x398 [ppp_async]

> Could be a ppp bug, more likely a USB bug, but that's a well-tested code
> path.
> 
> Greg? Anyone?  ANy idea where to start looking?

Maybe the serial device driver is submitting an URB that is already in 
use.  This patch might catch the error.

Alan Stern



Index: usb-2.6/drivers/usb/core/urb.c
===================================================================
--- usb-2.6.orig/drivers/usb/core/urb.c
+++ usb-2.6/drivers/usb/core/urb.c
@@ -233,6 +233,12 @@ int usb_submit_urb(struct urb *urb, gfp_
 			|| dev->state == USB_STATE_SUSPENDED)
 		return -EHOSTUNREACH;
 
+	/* Not a precise test, but useful for debugging */
+	if (urb->status == -EINPROGRESS) {
+		WARN_ON(1);
+		return -EBUSY;
+	}
+
 	urb->status = -EINPROGRESS;
 	urb->actual_length = 0;
 


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.