• Bug#261706: usb-storage hangs all USB devices (1/3)

    From Horms@1:229/2 to Matt Zimmerman on Thu Aug 12 05:30:08 2004
    XPost: linux.debian.kernel
    From: [email protected]

    On Sun, Aug 01, 2004 at 10:43:30PM -0700, Matt Zimmerman wrote:
    Is there anything further I can do to help resolve this issue? For now, I
    am working around the problem by backing out to an older cdrecord which doesn't trigger the problem, but I would like to help solve it correctly.

    Has anyone else seen this behaviour?

    A long shot, but is this of any help https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=90442

    I have attached the patch which was included in the
    recently released kernel-2.4.22-1.2199.nptl kernel for fedora.

    --
    Horms

    diff -ur linux-2.4.20-20.7.5/drivers/usb/serial/usbserial.c linux-2.4.20-20.7.5-u1/drivers/usb/serial/usbserial.c
    --- linux-2.4.20-20.7.5/drivers/usb/serial/usbserial.c 2003-11-17 22:30:34.000000000 -0500
    +++ linux-2.4.20-20.7.5-u1/drivers/usb/serial/usbserial.c 2003-11-17 22:33:16.000000000 -0500
    @@ -297,6 +297,7 @@
    #include <linux/spinlock.h>
    #include <linux/list.h>
    #include <linux/smp_lock.h>
    +#include <linux/spinlock.h>
    #include <linux/usb.h>

    #ifdef CONFIG_USB_SERIAL_DEBUG
    @@ -347,10 +348,24 @@
    };
    #endif

    +/*
    + * The post kludge structures and variables.
    + */
    +#define POST_BSIZE 100 /* little below 128 in total */
    +struct usb_serial_post_job {
    + struct list_head link;
    + struct usb_serial_port *port;
    + int len;
    + char buff[POST_BSIZE];
    +};
    +static spinlock_t post_lock = SPIN_LOCK_UNLOCKED; /* Also covers ->ref */ +static struct list_head post_list = LIST_HEAD_INIT(post_list);
    +static struct tq_struct post_task;

    /* local function prototypes */
    static int serial_open (struct tty_struct *tty, struct file * filp);
    static void serial_close (struct tty_struct *tty, struct file * fi