ChangeSet 1.924.3.1, 2002/11/30 00:01:04-08:00, oliver@oenone.homelinux.org [PATCH] module unload race with usb serial drivers the serial subdrivers may be unloading while we open. This patch against 2.5 guards against that. diff -Nru a/drivers/usb/serial/usb-serial.c b/drivers/usb/serial/usb-serial.c --- a/drivers/usb/serial/usb-serial.c Sun Dec 1 23:06:33 2002 +++ b/drivers/usb/serial/usb-serial.c Sun Dec 1 23:06:33 2002 @@ -467,9 +467,13 @@ down (&port->sem); port->tty = tty; - /* lock this module before we call it */ + /* lock this module before we call it, + this may, which means we must bail out, safe because we are called with BKL held */ if (serial->type->owner) - __MOD_INC_USE_COUNT(serial->type->owner); + if (!try_module_get(serial->type->owner)) { + retval = -ENODEV; + goto bailout; + } ++port->open_count; if (port->open_count == 1) { @@ -485,6 +489,7 @@ __MOD_DEC_USE_COUNT(serial->type->owner); } } +bailout: up (&port->sem); return retval;