max3110: Fix up port->tty backreferencing
authorAlan Cox <alan@linux.intel.com>
Fri, 26 Aug 2011 10:26:00 +0000 (11:26 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 26 Aug 2011 18:01:15 +0000 (11:01 -0700)
We want to keep refcounts properly on this against hangup.

Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/tty/serial/mrst_max3110.c

index 42aa43934b20c0fd1cbaaa79953bb0aceaba25d1..1aa2c3cd2146dc31d2e95a7f09a8f51d34fd1430 100644 (file)
@@ -347,7 +347,7 @@ receive_chars(struct uart_max3110 *max, unsigned short *str, int len)
        if (!port->state)
                return 0;
 
-       tty = port->state->port.tty;
+       tty = tty_port_tty_get(&port->state->port);
        if (!tty)
                return 0;
 
@@ -364,8 +364,10 @@ receive_chars(struct uart_max3110 *max, unsigned short *str, int len)
                }
        }
 
-       if (!w)
+       if (!w) {
+               tty_kref_put(tty);
                return 0;
+       }
 
        for (r = 0; w; r += usable, w -= usable) {
                usable = tty_buffer_request_room(tty, w);
@@ -375,6 +377,7 @@ receive_chars(struct uart_max3110 *max, unsigned short *str, int len)
                }
        }
        tty_flip_buffer_push(tty);
+       tty_kref_put(tty);
 
        return r;
 }