On Mon, Jun 03, 2013 at 07:49:59PM -0700, Greg Kroah-Hartman wrote: > On Mon, May 27, 2013 at 02:28:51PM +0200, Bjørn Mork wrote: > > But, IMHO, a nicer approach would be to make the allocation completely > > dynamic, using e.g. the idr subsystem. Static tables are always feel > > like straight jackets to me, no matter how big they are :) > > You are right, I didn't change the code to use idr (it predates idr by > about a decade or so), because I thought we needed the "rage" logic that > the usb-serial minor reservation does. Rage logic sounds like my kinda code. > +static int get_free_port(struct usb_serial_port *port) > { > - unsigned int i, j; > - int good_spot; > - > - dev_dbg(&serial->interface->dev, "%s %d\n", __func__, num_ports); > + int i; > > - *minor = 0; > mutex_lock(&table_lock); > - for (i = 0; i < SERIAL_TTY_MINORS; ++i) { > - if (serial_table[i]) > - continue; > + i = idr_alloc(&serial_minors, port, 0, 0, GFP_KERNEL); > + if (i < 0) > + return -EEXIST; > + port->number = i; > + mutex_unlock(&table_lock); > + return i; > +} -EEXIST case misses the mutex unlock. Dave -- 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