diff options
author | Peter Hurley <peter@hurleysoftware.com> | 2013-03-05 01:09:05 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-03-06 02:47:04 -0500 |
commit | 2f7c069b96ed7b1f6236f2fa7b0bc06f4f54f2d9 (patch) | |
tree | 51aef4f367dfd5676e1eefaaf3f0ba6b8425e5d7 | |
parent | a4ed2e737cb73e4405a3649f8aef7619b99fecae (diff) |
net/irda: Hold port lock while bumping blocked_open
Although tty_lock() already protects concurrent update to
blocked_open, that fails to meet the separation-of-concerns between
tty_port and tty.
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/irda/ircomm/ircomm_tty.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/net/irda/ircomm/ircomm_tty.c b/net/irda/ircomm/ircomm_tty.c index 1721dc7e4315..d282bbea710e 100644 --- a/net/irda/ircomm/ircomm_tty.c +++ b/net/irda/ircomm/ircomm_tty.c | |||
@@ -317,8 +317,8 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self, | |||
317 | spin_lock_irqsave(&port->lock, flags); | 317 | spin_lock_irqsave(&port->lock, flags); |
318 | if (!tty_hung_up_p(filp)) | 318 | if (!tty_hung_up_p(filp)) |
319 | port->count--; | 319 | port->count--; |
320 | spin_unlock_irqrestore(&port->lock, flags); | ||
321 | port->blocked_open++; | 320 | port->blocked_open++; |
321 | spin_unlock_irqrestore(&port->lock, flags); | ||
322 | 322 | ||
323 | while (1) { | 323 | while (1) { |
324 | if (tty->termios.c_cflag & CBAUD) | 324 | if (tty->termios.c_cflag & CBAUD) |
@@ -362,8 +362,8 @@ static int ircomm_tty_block_til_ready(struct ircomm_tty_cb *self, | |||
362 | spin_lock_irqsave(&port->lock, flags); | 362 | spin_lock_irqsave(&port->lock, flags); |
363 | if (!tty_hung_up_p(filp)) | 363 | if (!tty_hung_up_p(filp)) |
364 | port->count++; | 364 | port->count++; |
365 | spin_unlock_irqrestore(&port->lock, flags); | ||
366 | port->blocked_open--; | 365 | port->blocked_open--; |
366 | spin_unlock_irqrestore(&port->lock, flags); | ||
367 | 367 | ||
368 | IRDA_DEBUG(1, "%s(%d):block_til_ready after blocking on %s open_count=%d\n", | 368 | IRDA_DEBUG(1, "%s(%d):block_til_ready after blocking on %s open_count=%d\n", |
369 | __FILE__, __LINE__, tty->driver->name, port->count); | 369 | __FILE__, __LINE__, tty->driver->name, port->count); |