forked from Minki/linux
tty: nozomi, fix tty refcounting bug
Don't forget to drop a tty refererence on fail paths in receive_data(). Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
5c9228f0cf
commit
9237a81a14
@ -828,7 +828,7 @@ static int receive_data(enum port_type index, struct nozomi *dc)
|
|||||||
struct port *port = &dc->port[index];
|
struct port *port = &dc->port[index];
|
||||||
void __iomem *addr = port->dl_addr[port->toggle_dl];
|
void __iomem *addr = port->dl_addr[port->toggle_dl];
|
||||||
struct tty_struct *tty = tty_port_tty_get(&port->port);
|
struct tty_struct *tty = tty_port_tty_get(&port->port);
|
||||||
int i;
|
int i, ret;
|
||||||
|
|
||||||
if (unlikely(!tty)) {
|
if (unlikely(!tty)) {
|
||||||
DBG1("tty not open for port: %d?", index);
|
DBG1("tty not open for port: %d?", index);
|
||||||
@ -844,12 +844,14 @@ static int receive_data(enum port_type index, struct nozomi *dc)
|
|||||||
|
|
||||||
/* disable interrupt in downlink... */
|
/* disable interrupt in downlink... */
|
||||||
disable_transmit_dl(index, dc);
|
disable_transmit_dl(index, dc);
|
||||||
return 0;
|
ret = 0;
|
||||||
|
goto put;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(size == 0)) {
|
if (unlikely(size == 0)) {
|
||||||
dev_err(&dc->pdev->dev, "size == 0?\n");
|
dev_err(&dc->pdev->dev, "size == 0?\n");
|
||||||
return 1;
|
ret = 1;
|
||||||
|
goto put;
|
||||||
}
|
}
|
||||||
|
|
||||||
tty_buffer_request_room(tty, size);
|
tty_buffer_request_room(tty, size);
|
||||||
@ -871,8 +873,10 @@ static int receive_data(enum port_type index, struct nozomi *dc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_bit(index, &dc->flip);
|
set_bit(index, &dc->flip);
|
||||||
|
ret = 1;
|
||||||
|
put:
|
||||||
tty_kref_put(tty);
|
tty_kref_put(tty);
|
||||||
return 1;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Debug for interrupts */
|
/* Debug for interrupts */
|
||||||
|
Loading…
Reference in New Issue
Block a user