On Thu, 20 Nov 2003, David Brownell wrote:

> > Nov 10 19:59:25 shaun kernel: usb-storage: Command WRITE_10 (10 bytes)
> > Nov 10 19:59:25 shaun kernel: usb-storage:  2a 00 00 01 4f 6e 00 00 1f 00
> > Nov 10 19:59:25 shaun kernel: usb-storage: Bulk Command S 0x43425355 T 0x131f L
> > 63488 F 0 Trg 0 LUN 0 CL 10
> > Nov 10 19:59:25 shaun kernel: usb-storage: usb_stor_bulk_transfer_buf: xfer 31
> > bytes
> > Nov 10 19:59:25 shaun kernel: usb-storage: Status code 0; transferred 31/31
> > Nov 10 19:59:25 shaun kernel: usb-storage: -- transfer complete
> > Nov 10 19:59:25 shaun kernel: usb-storage: Bulk command transfer result=0
> > Nov 10 19:59:25 shaun kernel: usb-storage: usb_stor_bulk_transfer_sglist: xfer
> > 63488 bytes, 2 entries
> > Nov 10 19:59:25 shaun kernel: usb 1-1: sg_complete, unlink --> -19
> 
> That is, the sg_complete() code was cleaning up after an error and
> it ran into a problem ... like maybe it was trying to unlink an urb
> that hadn't yet been submitted.  That particular error is nothing to
> worry about AFAICT, unless perhaps it's masking something else.
> (The diagnostic suggests _something_ unexpected.)
> 
> The other thing that looks potentially interesting is that you managed
> to get more than the usual amount of contiguous memory.  Normally I'd
> expect about fifteen sglist entries.  A few things come to mind then:
> 
>   - Individual bulk transfers over about four "pages" (16K) will kick in
>     a mechanism in the EHCI driver that should work fine, but which
>     doesn't get used much at all.  A bug could be lurking there
>     (qtd_fill at the top of ehci-q.c), but none jumps out at me.
> 
>   - If "dvdrecord" is using the SG driver, it's also possible there's
>     an issue with alignment.  In this case, the buffers must all be
>     aligned on 512 byte boundaries -- and have lengths that are all
>     multiples of 512 bytes -- if the SG code is doing anything that
>     verges on zerocopy I/O ("O_DIRECT").

I don't know anything about how dvdrecord works, but alignment could well
be the source of the problem.  Try applying this patch and see if it
changes anything:

http://marc.theaimsgroup.com/?l=linux-usb-devel&m=106943859421845&w=2

> Maybe you can play with "dvdrecord" options (or system load) to see
> if you can make it deliver smaller sglist entries, to rule out that
> first factor.
> 
> 
> > Nov 10 20:01:05 shaun kernel: usb-storage: command_abort called
> > Nov 10 20:01:05 shaun kernel: usb-storage: usb_stor_stop_transport called
> > Nov 10 20:01:05 shaun kernel: usb-storage: -- cancelling sg request
> 
> Also it seems like usb-storage decided to abort after ten seconds.
> That's short for the usual timeouts (maybe dvdrecord chose it), but
> long for recovery from the fault noted above.  But it didn't say a
> thing about _why_ it chose to cancel ... so it's not clear to me
> whether the fault was reported (and if so, what was it?) but mis-handled,
> or whether it was instead just never reported.

The abort was a simple timeout, and almost certainly the time limit was 
chosen by dvdrecord.  Whatever the problem was, it prevented the 
usb_sg_wait() routine from returning; hence the timeout.

Alan Stern



-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to