aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/tty_port.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/tty/tty_port.c')
-rw-r--r--drivers/tty/tty_port.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
index 1b9335796da4..40b31835f80b 100644
--- a/drivers/tty/tty_port.c
+++ b/drivers/tty/tty_port.c
@@ -193,8 +193,7 @@ void tty_port_tty_set(struct tty_port *port, struct tty_struct *tty)
193 unsigned long flags; 193 unsigned long flags;
194 194
195 spin_lock_irqsave(&port->lock, flags); 195 spin_lock_irqsave(&port->lock, flags);
196 if (port->tty) 196 tty_kref_put(port->tty);
197 tty_kref_put(port->tty);
198 port->tty = tty_kref_get(tty); 197 port->tty = tty_kref_get(tty);
199 spin_unlock_irqrestore(&port->lock, flags); 198 spin_unlock_irqrestore(&port->lock, flags);
200} 199}
@@ -473,12 +472,10 @@ int tty_port_close_start(struct tty_port *port,
473{ 472{
474 unsigned long flags; 473 unsigned long flags;
475 474
476 spin_lock_irqsave(&port->lock, flags); 475 if (tty_hung_up_p(filp))
477 if (tty_hung_up_p(filp)) {
478 spin_unlock_irqrestore(&port->lock, flags);
479 return 0; 476 return 0;
480 }
481 477
478 spin_lock_irqsave(&port->lock, flags);
482 if (tty->count == 1 && port->count != 1) { 479 if (tty->count == 1 && port->count != 1) {
483 printk(KERN_WARNING 480 printk(KERN_WARNING
484 "tty_port_close_start: tty->count = 1 port count = %d.\n", 481 "tty_port_close_start: tty->count = 1 port count = %d.\n",
@@ -522,6 +519,7 @@ void tty_port_close_end(struct tty_port *port, struct tty_struct *tty)
522{ 519{
523 unsigned long flags; 520 unsigned long flags;
524 521
522 tty_ldisc_flush(tty);
525 tty->closing = 0; 523 tty->closing = 0;
526 524
527 spin_lock_irqsave(&port->lock, flags); 525 spin_lock_irqsave(&port->lock, flags);