Browse Source

tty: Remove TTY_HUPPING

Now that tty_ldisc_hangup() does not drop the tty lock, it is no
longer possible to observe TTY_HUPPING while holding the tty lock
on another cpu.

Remove TTY_HUPPING bit definition.

Reviewed-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Peter Hurley 10 years ago
parent
commit
3ff51a199f
3 changed files with 2 additions and 14 deletions
  1. 1 11
      drivers/tty/tty_io.c
  2. 1 2
      drivers/tty/tty_ldisc.c
  3. 0 1
      include/linux/tty.h

+ 1 - 11
drivers/tty/tty_io.c

@@ -690,9 +690,6 @@ static void __tty_hangup(struct tty_struct *tty, int exit_session)
 		return;
 		return;
 	}
 	}
 
 
-	/* some functions below drop BTM, so we need this bit */
-	set_bit(TTY_HUPPING, &tty->flags);
-
 	/* inuse_filps is protected by the single tty lock,
 	/* inuse_filps is protected by the single tty lock,
 	   this really needs to change if we want to flush the
 	   this really needs to change if we want to flush the
 	   workqueue with the lock held */
 	   workqueue with the lock held */
@@ -717,10 +714,6 @@ static void __tty_hangup(struct tty_struct *tty, int exit_session)
 	while (refs--)
 	while (refs--)
 		tty_kref_put(tty);
 		tty_kref_put(tty);
 
 
-	/*
-	 * it drops BTM and thus races with reopen
-	 * we protect the race by TTY_HUPPING
-	 */
 	tty_ldisc_hangup(tty);
 	tty_ldisc_hangup(tty);
 
 
 	spin_lock_irq(&tty->ctrl_lock);
 	spin_lock_irq(&tty->ctrl_lock);
@@ -752,8 +745,6 @@ static void __tty_hangup(struct tty_struct *tty, int exit_session)
 	 * can't yet guarantee all that.
 	 * can't yet guarantee all that.
 	 */
 	 */
 	set_bit(TTY_HUPPED, &tty->flags);
 	set_bit(TTY_HUPPED, &tty->flags);
-	clear_bit(TTY_HUPPING, &tty->flags);
-
 	tty_unlock(tty);
 	tty_unlock(tty);
 
 
 	if (f)
 	if (f)
@@ -1461,8 +1452,7 @@ static int tty_reopen(struct tty_struct *tty)
 {
 {
 	struct tty_driver *driver = tty->driver;
 	struct tty_driver *driver = tty->driver;
 
 
-	if (test_bit(TTY_CLOSING, &tty->flags) ||
-			test_bit(TTY_HUPPING, &tty->flags))
+	if (test_bit(TTY_CLOSING, &tty->flags))
 		return -EIO;
 		return -EIO;
 
 
 	if (driver->type == TTY_DRIVER_TYPE_PTY &&
 	if (driver->type == TTY_DRIVER_TYPE_PTY &&

+ 1 - 2
drivers/tty/tty_ldisc.c

@@ -544,8 +544,7 @@ int tty_set_ldisc(struct tty_struct *tty, int ldisc)
 
 
 	old_ldisc = tty->ldisc;
 	old_ldisc = tty->ldisc;
 
 
-	if (test_bit(TTY_HUPPING, &tty->flags) ||
-	    test_bit(TTY_HUPPED, &tty->flags)) {
+	if (test_bit(TTY_HUPPED, &tty->flags)) {
 		/* We were raced by the hangup method. It will have stomped
 		/* We were raced by the hangup method. It will have stomped
 		   the ldisc data and closed the ldisc down */
 		   the ldisc data and closed the ldisc down */
 		tty_ldisc_enable_pair(tty, o_tty);
 		tty_ldisc_enable_pair(tty, o_tty);

+ 0 - 1
include/linux/tty.h

@@ -321,7 +321,6 @@ struct tty_file_private {
 #define TTY_PTY_LOCK 		16	/* pty private */
 #define TTY_PTY_LOCK 		16	/* pty private */
 #define TTY_NO_WRITE_SPLIT 	17	/* Preserve write boundaries to driver */
 #define TTY_NO_WRITE_SPLIT 	17	/* Preserve write boundaries to driver */
 #define TTY_HUPPED 		18	/* Post driver->hangup() */
 #define TTY_HUPPED 		18	/* Post driver->hangup() */
-#define TTY_HUPPING 		21	/* ->hangup() in progress */
 #define TTY_LDISC_HALTED	22	/* Line discipline is halted */
 #define TTY_LDISC_HALTED	22	/* Line discipline is halted */
 
 
 #define TTY_WRITE_FLUSH(tty) tty_write_flush((tty))
 #define TTY_WRITE_FLUSH(tty) tty_write_flush((tty))