Commit 4a2b5fdd authored by Sukadev Bhattiprolu's avatar Sukadev Bhattiprolu Committed by Linus Torvalds

Move tty lookup/reopen to caller

Move tty_driver_lookup_tty() and tty_reopen() from tty_init_dev()
into tty_open() (one of the two callers of tty_init_dev()).  These
calls are not really required in ptmx_open(), the other caller,
since ptmx_open() would be setting up a new tty.

Changelog[v2]:
	- remove the lookup and reopen calls from ptmx_open
	- merge with recent changes to ttydev tree
Signed-off-by: default avatarSukadev Bhattiprolu <sukadev@us.ibm.com>
Signed-off-by: default avatarAlan Cox <alan@redhat.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent bf970ee4
...@@ -1376,19 +1376,6 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx, ...@@ -1376,19 +1376,6 @@ struct tty_struct *tty_init_dev(struct tty_driver *driver, int idx,
struct tty_struct *tty; struct tty_struct *tty;
int retval; int retval;
/* check whether we're reopening an existing tty */
tty = tty_driver_lookup_tty(driver, idx);
if (IS_ERR(tty))
return tty;
if (tty) {
retval = tty_reopen(tty);
if (retval)
return ERR_PTR(retval);
return tty;
}
/* Check if pty master is being opened multiple times */ /* Check if pty master is being opened multiple times */
if (driver->subtype == PTY_TYPE_MASTER && if (driver->subtype == PTY_TYPE_MASTER &&
(driver->flags & TTY_DRIVER_DEVPTS_MEM) && !first_ok) (driver->flags & TTY_DRIVER_DEVPTS_MEM) && !first_ok)
...@@ -1790,7 +1777,7 @@ void tty_release_dev(struct file *filp) ...@@ -1790,7 +1777,7 @@ void tty_release_dev(struct file *filp)
static int __tty_open(struct inode *inode, struct file *filp) static int __tty_open(struct inode *inode, struct file *filp)
{ {
struct tty_struct *tty; struct tty_struct *tty = NULL;
int noctty, retval; int noctty, retval;
struct tty_driver *driver; struct tty_driver *driver;
int index; int index;
...@@ -1847,7 +1834,21 @@ static int __tty_open(struct inode *inode, struct file *filp) ...@@ -1847,7 +1834,21 @@ static int __tty_open(struct inode *inode, struct file *filp)
return -ENODEV; return -ENODEV;
} }
got_driver: got_driver:
if (!tty) {
/* check whether we're reopening an existing tty */
tty = tty_driver_lookup_tty(driver, index);
if (IS_ERR(tty))
return PTR_ERR(tty);
}
if (tty) {
retval = tty_reopen(tty);
if (retval)
tty = ERR_PTR(retval);
} else
tty = tty_init_dev(driver, index, 0); tty = tty_init_dev(driver, index, 0);
mutex_unlock(&tty_mutex); mutex_unlock(&tty_mutex);
tty_driver_kref_put(driver); tty_driver_kref_put(driver);
if (IS_ERR(tty)) if (IS_ERR(tty))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment