diff options
Diffstat (limited to 'drivers/tty/pty.c')
| -rw-r--r-- | drivers/tty/pty.c | 17 | 
1 files changed, 15 insertions, 2 deletions
| diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c index 98b6e3bdb000..e809e9d4683c 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c @@ -446,8 +446,19 @@ static inline void legacy_pty_init(void) { }  int pty_limit = NR_UNIX98_PTY_DEFAULT;  static int pty_limit_min;  static int pty_limit_max = NR_UNIX98_PTY_MAX; +static int tty_count;  static int pty_count; +static inline void pty_inc_count(void) +{ +	pty_count = (++tty_count) / 2; +} + +static inline void pty_dec_count(void) +{ +	pty_count = (--tty_count) / 2; +} +  static struct cdev ptmx_cdev;  static struct ctl_table pty_table[] = { @@ -542,6 +553,7 @@ static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver,  static void pty_unix98_shutdown(struct tty_struct *tty)  { +	tty_driver_remove_tty(tty->driver, tty);  	/* We have our own method as we don't use the tty index */  	kfree(tty->termios);  } @@ -588,7 +600,8 @@ static int pty_unix98_install(struct tty_driver *driver, struct tty_struct *tty)  	 */  	tty_driver_kref_get(driver);  	tty->count++; -	pty_count++; +	pty_inc_count(); /* tty */ +	pty_inc_count(); /* tty->link */  	return 0;  err_free_mem:  	deinitialize_tty_struct(o_tty); @@ -602,7 +615,7 @@ err_free_tty:  static void pty_unix98_remove(struct tty_driver *driver, struct tty_struct *tty)  { -	pty_count--; +	pty_dec_count();  }  static const struct tty_operations ptm_unix98_ops = { | 
