mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
devpts: more pty driver interface cleanups
This is more prep-work for the upcoming pty changes. Still just code cleanup with no actual semantic changes. This removes a bunch pointless complexity by just having the slave pty side remember the dentry associated with the devpts slave rather than the inode. That allows us to remove all the "look up the dentry" code for when we want to remove it again. Together with moving the tty pointer from "inode->i_private" to "dentry->d_fsdata" and getting rid of pointless inode locking, this removes about 30 lines of code. Not only is the end result smaller, it's simpler and easier to understand. The old code, for example, depended on the d_find_alias() to not just find the dentry, but also to check that it is still hashed, which in turn validated the tty pointer in the inode. That is a _very_ roundabout way to say "invalidate the cached tty pointer when the dentry is removed". The new code just does dentry->d_fsdata = NULL; in devpts_pty_kill() instead, invalidating the tty pointer rather more directly and obviously. Don't do something complex and subtle when the obvious straightforward approach will do. The rest of the patch (ie apart from code deletion and the above tty pointer clearing) is just switching the calling convention to pass the dentry or file pointer around instead of the inode. Cc: Eric Biederman <[email protected]> Cc: Peter Anvin <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Al Viro <[email protected]> Cc: Peter Hurley <[email protected]> Cc: Serge Hallyn <[email protected]> Cc: Willy Tarreau <[email protected]> Cc: Aurelien Jarno <[email protected]> Cc: Alan Cox <[email protected]> Cc: Jann Horn <[email protected]> Cc: Greg KH <[email protected]> Cc: Jiri Slaby <[email protected]> Cc: Florian Weimer <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
bcc981e9ed
commit
8ead9dd547
5 changed files with 28 additions and 59 deletions
|
|
@ -626,7 +626,7 @@ static int pty_unix98_ioctl(struct tty_struct *tty,
|
|||
*/
|
||||
|
||||
static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver,
|
||||
struct inode *ptm_inode, int idx)
|
||||
struct file *file, int idx)
|
||||
{
|
||||
/* Master must be open via /dev/ptmx */
|
||||
return ERR_PTR(-EIO);
|
||||
|
|
@ -642,12 +642,12 @@ static struct tty_struct *ptm_unix98_lookup(struct tty_driver *driver,
|
|||
*/
|
||||
|
||||
static struct tty_struct *pts_unix98_lookup(struct tty_driver *driver,
|
||||
struct inode *pts_inode, int idx)
|
||||
struct file *file, int idx)
|
||||
{
|
||||
struct tty_struct *tty;
|
||||
|
||||
mutex_lock(&devpts_mutex);
|
||||
tty = devpts_get_priv(pts_inode);
|
||||
tty = devpts_get_priv(file->f_path.dentry);
|
||||
mutex_unlock(&devpts_mutex);
|
||||
/* Master must be open before slave */
|
||||
if (!tty)
|
||||
|
|
@ -722,7 +722,7 @@ static int ptmx_open(struct inode *inode, struct file *filp)
|
|||
{
|
||||
struct pts_fs_info *fsi;
|
||||
struct tty_struct *tty;
|
||||
struct inode *slave_inode;
|
||||
struct dentry *dentry;
|
||||
int retval;
|
||||
int index;
|
||||
|
||||
|
|
@ -769,14 +769,12 @@ static int ptmx_open(struct inode *inode, struct file *filp)
|
|||
|
||||
tty_add_file(tty, filp);
|
||||
|
||||
slave_inode = devpts_pty_new(fsi,
|
||||
MKDEV(UNIX98_PTY_SLAVE_MAJOR, index), index,
|
||||
tty->link);
|
||||
if (IS_ERR(slave_inode)) {
|
||||
retval = PTR_ERR(slave_inode);
|
||||
dentry = devpts_pty_new(fsi, index, tty->link);
|
||||
if (IS_ERR(dentry)) {
|
||||
retval = PTR_ERR(dentry);
|
||||
goto err_release;
|
||||
}
|
||||
tty->link->driver_data = slave_inode;
|
||||
tty->link->driver_data = dentry;
|
||||
|
||||
retval = ptm_driver->ops->open(tty, filp);
|
||||
if (retval)
|
||||
|
|
|
|||
|
|
@ -1367,12 +1367,12 @@ static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
|
|||
* Locking: tty_mutex must be held. If the tty is found, bump the tty kref.
|
||||
*/
|
||||
static struct tty_struct *tty_driver_lookup_tty(struct tty_driver *driver,
|
||||
struct inode *inode, int idx)
|
||||
struct file *file, int idx)
|
||||
{
|
||||
struct tty_struct *tty;
|
||||
|
||||
if (driver->ops->lookup)
|
||||
tty = driver->ops->lookup(driver, inode, idx);
|
||||
tty = driver->ops->lookup(driver, file, idx);
|
||||
else
|
||||
tty = driver->ttys[idx];
|
||||
|
||||
|
|
@ -2040,7 +2040,7 @@ static struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode,
|
|||
}
|
||||
|
||||
/* check whether we're reopening an existing tty */
|
||||
tty = tty_driver_lookup_tty(driver, inode, index);
|
||||
tty = tty_driver_lookup_tty(driver, filp, index);
|
||||
if (IS_ERR(tty)) {
|
||||
mutex_unlock(&tty_mutex);
|
||||
goto out;
|
||||
|
|
|
|||
Loading…
Reference in a new issue