This is a similar issue as the one I just addressed in ftdi_sio.c. I didn't like the warning trace being generated by urb.c, when the usb_unlink_urb() has been used for synchronous removal of the port read URB. I am just wondering, why are the read URB's being removed synchronously and the others are not?
The rest of the patch is just a cleanup. All the 'NULL' checks are not necessary. ------------------------------------------------------------------- --- linux-2.6.9-rc1-mm1/drivers/usb/serial/usb-serial.c 2004-09-08 04:51:23.000000000 +0200 +++ linux-2.6.9-rc1-mm1-ccs/drivers/usb/serial/usb-serial.c 2004-09-08 15:31:11.000000000 +0200 @@ -14,6 +14,14 @@ * * See Documentation/usb/usb-serial.txt for more information on using this driver * + * (09/08/2004) Jan Capek + * destroy_serial(), port_release() - removed test on URB's being NULL as + * these checks are always performed by underlying usb_kill_urb(), + * usb_unlink_urb, usb_free_urb() resp. Further, port->read_urb is now + * removed synchronously using usb_kill_urb() instead of usb_unlink_urb(). + * This is to ensure consistency with the urb.c, so that usb_unlink_urb() + * is not used for synchronous unlinking anymore. + * * (12/10/2002) gkh * Split the ports off into their own struct device, and added a * usb-serial bus driver. @@ -454,18 +462,15 @@ port = serial->port[i]; if (!port) continue; - if (port->read_urb) { - usb_unlink_urb(port->read_urb); - usb_free_urb(port->read_urb); - } - if (port->write_urb) { - usb_unlink_urb(port->write_urb); - usb_free_urb(port->write_urb); - } - if (port->interrupt_in_urb) { - usb_unlink_urb(port->interrupt_in_urb); - usb_free_urb(port->interrupt_in_urb); - } + usb_kill_urb(port->read_urb); + usb_free_urb(port->read_urb); + + usb_unlink_urb(port->write_urb); + usb_free_urb(port->write_urb); + + usb_unlink_urb(port->interrupt_in_urb); + usb_free_urb(port->interrupt_in_urb); + kfree(port->bulk_in_buffer); kfree(port->bulk_out_buffer); kfree(port->interrupt_in_buffer); @@ -818,18 +823,16 @@ struct usb_serial_port *port = to_usb_serial_port(dev); dbg ("%s - %s", __FUNCTION__, dev->bus_id); - if (port->read_urb) { - usb_unlink_urb(port->read_urb); - usb_free_urb(port->read_urb); - } - if (port->write_urb) { - usb_unlink_urb(port->write_urb); - usb_free_urb(port->write_urb); - } - if (port->interrupt_in_urb) { - usb_unlink_urb(port->interrupt_in_urb); - usb_free_urb(port->interrupt_in_urb); - } + + usb_kill_urb(port->read_urb); + usb_free_urb(port->read_urb); + + usb_unlink_urb(port->write_urb); + usb_free_urb(port->write_urb); + + usb_unlink_urb(port->interrupt_in_urb); + usb_free_urb(port->interrupt_in_urb); + kfree(port->bulk_in_buffer); kfree(port->bulk_out_buffer); kfree(port->interrupt_in_buffer); ---------------------------------------------------------------- Thanks, Jan Jan Capek - CCS Inc. Firmware developer ------------------------------------------------------- This SF.Net email is sponsored by BEA Weblogic Workshop FREE Java Enterprise J2EE developer tools! Get your free copy of BEA WebLogic Workshop 8.1 today. http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click _______________________________________________ [EMAIL PROTECTED] To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel