Copying a large amount of datas (several gigabytes) between two USB 2.0 attached
disks will crash any Linux 2.6 SMP kernel, including 2.6.9-rc3.
The stack report is:
qh_completions 0x7B/0x118 [ehci_hcd]
scan_async
ehci_work
echi_irq
handle_IRQ_event
commnon_interrupt
default_idle
default_idle
cpu_idle
The crash will append on any attempt to copy something like 100 GB.
Copying something like 1 GB or less works nicely.
Switching to an UP kernel solves the problem.
Switching to a 2.4 kernel solves the problem.
I tested it on two different machines, with two different disks sets.
On Thu, Sep 30, Hubert Tonneau wrote:
> Copying a large amount of datas (several gigabytes) between two USB 2.0 attached
> disks will crash any Linux 2.6 SMP kernel, including 2.6.9-rc3.
>
> The stack report is:
> qh_completions 0x7B/0x118 [ehci_hcd]
this was fixed a while ago, but not yet synced with Linus.
...
Maybe the call chain is something like this:
ehci_irq
spin_lock (&ehci->lock)
ehci_work ehci_watchdog
end_unlink_async
qh_completions
ehci_urb_done
spin_unlock (&ehci->lock)
usb_hcd_giveback_urb spin_lock (&ehci->lock)
ehci_work
now ehci_watchdog could proceed until usb_hcd_giveback_urb returns, then
ehci_urb_done must wait until the watchdog is done. both seem to operate
on the same list. I cant test it right now, box crashed.
...
--
USB is for mice, FireWire is for men!
sUse lINUX ag, nÜRNBERG