Hi Alan, On Tue, 28 Jul 2009 13:29:11 +0100 Alan Cox <alan@xxxxxxxxxxxxxxxxxxx> wrote: > > I need to look at the actual diff, but the combination looks completely > bogus unless I'm misreading the fixup which is possible. Below is the actual patch from the usb.current tree. -- Cheers, Stephen Rothwell sfr@xxxxxxxxxxxxxxxx >From oliver@xxxxxxxxxx Sat Jul 18 15:45:44 2009 From: Oliver Neukum <oliver@xxxxxxxxxx> Date: Sat, 18 Jul 2009 15:47:17 +0200 Subject: USB: fix usage count in usb serial generic open regarding autoresume To: Matthew Garrett <mjg59@xxxxxxxxxxxxx>, Greg KH <greg@xxxxxxxxx>, Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>, linux-usb@xxxxxxxxxxxxxxx Message-ID: <200907181547.17813.oliver@xxxxxxxxxx> Content-Disposition: inline The resume handler has to resubmit the reading URBs if the device is resumed while opened. But the open() method bumps the counter before it resumes a device. The fix is to increment the counter only after the resumption or if no resumption is attempted. Signed-off-by: Oliver Neukum <oliver@xxxxxxxxxx> Tested-by: Matthew Garrett <mjg@xxxxxxxxxx> Cc: stable <stable@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxx> --- drivers/usb/serial/usb-serial.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) --- a/drivers/usb/serial/usb-serial.c +++ b/drivers/usb/serial/usb-serial.c @@ -214,15 +214,13 @@ static int serial_open (struct tty_struc goto bailout_port_put; } - ++port->port.count; - /* set up our port structure making the tty driver * remember our port object, and us it */ tty->driver_data = port; tty_port_tty_set(&port->port, tty); /* If the console is attached, the device is already open */ - if (port->port.count == 1 && !port->console) { + if (!port->port.count && !port->console) { /* lock this module before we call it * this may fail, which means we must bail out, @@ -240,12 +238,16 @@ static int serial_open (struct tty_struc if (retval) goto bailout_module_put; + ++port->port.count; + /* only call the device specific open if this * is the first time the port is opened */ retval = serial->type->open(tty, port, filp); if (retval) goto bailout_interface_put; mutex_unlock(&serial->disc_mutex); + } else { + ++port->port.count; } mutex_unlock(&port->mutex); /* Now do the correct tty layer semantics */ -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html