On Sun, Sep 27, 2009 at 01:05:55PM +0100, Alan Cox wrote: > > This case could be handled in the drivers' unthrottle() by checking the > > ASYNC_CLOSING before resubmitting (or, in the ftdi case, adding to the > > work queue). > > Apart from this issue, poisoning / unpoisoning the urb on close and > > always trying to resubmit in the completion handler seems to solve the > > problems at hand (for ftdi at least). > What backtrace do you get from the WARN_ON when that occurs. I'm trying > to work out how it happens in the first place because really it would be > better if it simply didn't happen at all. drivers/usb/serial/usb-serial.c: serial_close - port 0 drivers/usb/serial/usb-serial.c: serial_chars_in_buffer = port 0 drivers/usb/serial/ftdi_sio.c: ftdi_chars_in_buffer - port 0 drivers/usb/serial/ftdi_sio.c: ftdi_close drivers/usb/serial/usb-serial.c: serial_unthrottle - port 0 ------------[ cut here ]------------ WARNING: at drivers/usb/serial/usb-serial.c:441 serial_unthrottle+0x77/0x80 [usbserial]() Hardware name: Vostro 1520 Modules linked in: ftdi_sio usbserial iwlagn iwlcore led_class [last unloaded: usbserial] Pid: 12297, comm: main Tainted: G W 2.6.31-gkh-1 #35 Call Trace: [<c133c1cf>] ? printk+0x18/0x21 [<c103071d>] warn_slowpath_common+0x6d/0xa0 [<f90a1317>] ? serial_unthrottle+0x77/0x80 [usbserial] [<f90a1317>] ? serial_unthrottle+0x77/0x80 [usbserial] [<c1030765>] warn_slowpath_null+0x15/0x20 [<f90a1317>] serial_unthrottle+0x77/0x80 [usbserial] [<c1184928>] tty_unthrottle+0x38/0x50 [<c118304b>] reset_buffer_flags+0xbb/0xe0 [<c1183086>] n_tty_flush_buffer+0x16/0x80 [<c1186437>] tty_ldisc_flush+0x27/0x40 [<c1186d0b>] tty_port_close_end+0x1b/0xe0 [<f90a1772>] serial_close+0x62/0xb0 [usbserial] [<c1180a29>] tty_release_dev+0x109/0x500 [<c105505b>] ? trace_hardirqs_on+0xb/0x10 [<c1053eeb>] ? trace_hardirqs_off+0xb/0x10 [<c1180e32>] tty_release+0x12/0x20 [<c10930a1>] __fput+0xf1/0x1f0 [<c10931b5>] fput+0x15/0x20 [<c1090047>] filp_close+0x47/0x70 [<c103251e>] put_files_struct+0x9e/0xd0 [<c1032592>] exit_files+0x42/0x50 [<c1033f23>] do_exit+0x603/0x670 [<c103c40d>] ? dequeue_signal+0x2d/0x180 [<c133f382>] ? _spin_unlock_irq+0x22/0x50 [<c1033fc9>] do_group_exit+0x39/0xa0 [<c105505b>] ? trace_hardirqs_on+0xb/0x10 [<c103d6eb>] get_signal_to_deliver+0x28b/0x470 [<c105505b>] ? trace_hardirqs_on+0xb/0x10 [<c133f3e9>] ? _spin_unlock_irqrestore+0x39/0x70 [<c10020fe>] do_notify_resume+0x9e/0x8a0 [<c1185ced>] ? put_ldisc+0x3d/0xb0 [<c105505b>] ? trace_hardirqs_on+0xb/0x10 [<c1185dd8>] ? tty_ldisc_deref+0x8/0x10 [<c117e62d>] ? tty_read+0x8d/0xc0 [<c11828b0>] ? n_tty_read+0x0/0x6e0 [<c1092737>] ? vfs_read+0x97/0x160 [<c117e5a0>] ? tty_read+0x0/0xc0 [<c10928bd>] ? sys_read+0x3d/0x70 [<c100302a>] work_notifysig+0x13/0x19 ---[ end trace ed4099568b286f28 ]--- -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html