Comment 123 for bug 61235

Revision history for this message
Q (thread13) wrote :

I am seeing this problem in one or another form since ~2006, and it looks like it will be with us for a while.

My understanding is that there may be a *number* of issues with USB 2.0 + that end with more or less similar symptoms, producing lots of confusion.

A number of workarounds exist, the above is just one of them; basically it all goes down to some way of limiting the connection speed, after what the USB connection seems to survive; the most robust ( and the worst in the terms of efficiency ) is switching down to USB 1.0 :

https://help.ubuntu.com/community/Mount/USB#USB_2_Issues
http://www.thinkwiki.org/wiki/Problem_with_USB_2.0

Please note that for the most of the distributions we can't just do "rmmod ehci_hcd" anymore and have to "unbind" the driver from the usb hub -- or even from a specific port :

http://lists.en.qi-hardware.com/pipermail/discussion/2011-August/008508.html

( The obscure numbers behind this magic are described here : http://www.makelinux.net/ldd3/?u=chp-12-sect-1, here : http://<email address hidden>/msg16895.html and here : http://www.linux-usb.org/FAQ.html#i6 ; this also contains a great introduction in sysfs: http://www.reactivated.net/writing_udev_rules.html )

At USB 2.* level, limiting the speed normally solves most of the issues except for some "intellectual" hardware that likes to go offline to save power etc and never wakes up ; one of these is changing the "max_sectors" value: http://www.linux-usb.org/FAQ.html#i5 ; it may have to do something with setting the proper buffer size as well )

in old days one have had to either write an udev rule ( see the link above ), or add the device into "unusual devs" and then recompile the kernel: http://www.phildev.net/linux/usb-unusualdevs-notes.html, http://lxr.free-electrons.com/source/include/linux/usb_usual.h, http://lxr.free-electrons.com/source/drivers/usb/storage/unusual_devs.h, http://yarchive.net/comp/linux/quirks.html ;

nowadays things are probably better : http://ftp.dei.uc.pt/pub/linux/kernel/people/gregkh/usb/2.6/2.6.28/usb-storage-make-the-quirks-module-parameter-writable.patch, http://lxr.free-electrons.com/source/Documentation/kernel-parameters.txt#L3444 and one can pass certain parameters to the kernel at the boot time : http://lxr.free-electrons.com/source/Documentation/kernel-parameters.txt#L9, e.g. http://anythingbutipod.com/forum/showthread.php?t=49138 .

Back to limiting the connection speed. My favorite way to go is via cgroups ( http://linux.oracle.com/documentation/EL6/Red_Hat_Enterprise_Linux-6-Resource_Management_Guide-en-US.pdf, http://www.mjmwired.net/kernel/Documentation/cgroups.txt, http://www.kernel.org/doc/Documentation/cgroups/devices.txt, http://www.oracle.com/technetwork/articles/servers-storage-admin/resource-controllers-linux-1506602.html, etc ) along with a related udev rule ; this seems to work well in most of the cases.

I will skip a number of related workarounds to keep this comment at a reasonable size ; returning back to the "intellectual" hardware, there are at least two quirk parameters to mention: "autosuspend" and "old_scheme_first" .

First allows us to disable auto-suspending: http://lxr.free-electrons.com/source/Documentation/kernel-parameters.txt#L3407, http://wiki.xbmc.org/index.php?title=HOW-TO:Suspend_and_wake_in_Ubuntu#Disable_Usbcore_Autosuspend, http://www.kernel.org/doc/Documentation/usb/power-management.txt, e.g. : http://linuxtv.org/wiki/index.php/Leadtek_WinFast_DTV2000DS#Losing_1_tuner ;

the second one is normally advised as a random shot when there is "some unknown bad magic happening", and I list it only for some very rare occasions ; here is a link: http://www.linux-usb.org/FAQ.html#ts10 .

hth,
/t13

PS. In some specific case, reading around the above links may also help )

--