--- zzzz-none-000/linux-2.6.32.61/drivers/usb/serial/garmin_gps.c 2013-06-10 09:43:48.000000000 +0000 +++ virian-300e-630/linux-2.6.32.61/drivers/usb/serial/garmin_gps.c 2013-02-11 16:39:19.000000000 +0000 @@ -974,7 +974,10 @@ if (!serial) return; - garmin_clear(garmin_data_p); + mutex_lock(&port->serial->disc_mutex); + + if (!port->serial->disconnected) + garmin_clear(garmin_data_p); /* shutdown our urbs */ usb_kill_urb(port->read_urb); @@ -983,6 +986,8 @@ /* keep reset state so we know that we must start a new session */ if (garmin_data_p->state != STATE_RESET) garmin_data_p->state = STATE_DISCONNECTED; + + mutex_unlock(&port->serial->disc_mutex); }