ChangeSet 1.1043.1.18, 2003/02/17 10:40:17-08:00, david-b@pacbell.net [PATCH] USB: sg_complete() warning downgrade An error check would wrongly fire after usb_sg_cancel(). This patch prevents the misfire, and also makes the diagnostic (a) more useful, (b) less scarey. diff -Nru a/drivers/usb/core/message.c b/drivers/usb/core/message.c --- a/drivers/usb/core/message.c Tue Feb 18 16:38:57 2003 +++ b/drivers/usb/core/message.c Tue Feb 18 16:38:57 2003 @@ -219,16 +219,25 @@ spin_lock_irqsave (&io->lock, flags); /* In 2.5 we require hcds' endpoint queues not to progress after fault - * reports, until the competion callback (this!) returns. That lets + * reports, until the completion callback (this!) returns. That lets * device driver code (like this routine) unlink queued urbs first, * if it needs to, since the HC won't work on them at all. So it's * not possible for page N+1 to overwrite page N, and so on. + * + * That's only for "hard" faults; "soft" faults (unlinks) sometimes + * complete before the HCD can get requests away from hardware, + * though never during cleanup after a hard fault. */ - if (io->status && urb->actual_length) { - err ("driver for bus %s dev %s ep %d-%s corrupted data!", - io->dev->bus->bus_name, io->dev->devpath, + if (io->status + && (io->status != -ECONNRESET + || urb->status != -ECONNRESET) + && urb->actual_length) { + dev_err (io->dev->bus->controller, + "dev %s ep%d%s scatterlist error %d/%d\n", + io->dev->devpath, usb_pipeendpoint (urb->pipe), - usb_pipein (urb->pipe) ? "in" : "out"); + usb_pipein (urb->pipe) ? "in" : "out", + urb->status, io->status); // BUG (); }