if (port_paranoia_check(port, __func__) != 0) {
                dbg("%s - port_paranoia_check, exiting\n", __func__);
                qt_port->ReadBulkStopped = 1;
-               return;
+               goto exit;
        }
 
        if (!serial) {
                dbg("%s - bad serial pointer, exiting\n", __func__);
-               return;
+               goto exit;
        }
        if (qt_port->closePending == 1) {
                /* Were closing , stop reading */
                dbg("%s - (qt_port->closepending == 1\n", __func__);
                qt_port->ReadBulkStopped = 1;
-               return;
+               goto exit;
        }
 
        /*
         */
        if (qt_port->RxHolding == 1) {
                qt_port->ReadBulkStopped = 1;
-               return;
+               goto exit;
        }
 
        if (urb->status) {
 
                dbg("%s - nonzero read bulk status received: %d\n",
                    __func__, urb->status);
-               return;
+               goto exit;
        }
 
        if (tty && RxCount) {
        }
 
        schedule_work(&port->work);
+exit:
+       tty_kref_put(tty);
 }
 
 /*
        }
 }
 
-static void qt_close( struct usb_serial_port *port)
+static void qt_close(struct usb_serial_port *port)
 {
        struct usb_serial *serial = port->serial;
        struct quatech_port *qt_port;
        /* wait up to for transmitter to empty */
        if (serial->dev)
                qt_block_until_empty(tty, qt_port);
+       tty_kref_put(tty);
 
        /* Close uart channel */
        status = qt_close_channel(serial, index);