Commit fa2ecfc5 authored by Jiri Slaby's avatar Jiri Slaby Committed by Greg Kroah-Hartman
Browse files

TTY: move devpts kill to pty



Now that we have control over tty->driver_data in pty, we can just
kill the /dev/pts/ in pty code too. Namely, in ->shutdown hook of
tty. For pty, this is called only once, for whichever end is closed
last. But we don't care, both driver_data are the inode as it used to
be till now.

Signed-off-by: default avatarJiri Slaby <jslaby@suse.cz>
Acked-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1dcb8e6d
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -363,6 +363,12 @@ err:
	return retval;
}

/* this is called once with whichever end is closed last */
static void pty_unix98_shutdown(struct tty_struct *tty)
{
	devpts_kill_index(tty->driver_data, tty->index);
}

static void pty_cleanup(struct tty_struct *tty)
{
	kfree(tty->port);
@@ -578,6 +584,7 @@ static const struct tty_operations ptm_unix98_ops = {
	.set_termios = pty_set_termios,
	.ioctl = pty_unix98_ioctl,
	.resize = pty_resize,
	.shutdown = pty_unix98_shutdown,
	.cleanup = pty_cleanup
};

@@ -593,6 +600,7 @@ static const struct tty_operations pty_unix98_ops = {
	.chars_in_buffer = pty_chars_in_buffer,
	.unthrottle = pty_unthrottle,
	.set_termios = pty_set_termios,
	.shutdown = pty_unix98_shutdown,
	.cleanup = pty_cleanup,
};

@@ -661,6 +669,7 @@ static int ptmx_open(struct inode *inode, struct file *filp)
		goto err_release;

	tty_unlock(tty);
	tty->driver_data = inode;
	tty->link->driver_data = slave_inode;
	return 0;
err_release:
+0 −5
Original line number Diff line number Diff line
@@ -1625,7 +1625,6 @@ int tty_release(struct inode *inode, struct file *filp)
	struct tty_struct *tty = file_tty(filp);
	struct tty_struct *o_tty;
	int	pty_master, tty_closing, o_tty_closing, do_sleep;
	int	devpts;
	int	idx;
	char	buf[64];

@@ -1640,7 +1639,6 @@ int tty_release(struct inode *inode, struct file *filp)
	idx = tty->index;
	pty_master = (tty->driver->type == TTY_DRIVER_TYPE_PTY &&
		      tty->driver->subtype == PTY_TYPE_MASTER);
	devpts = (tty->driver->flags & TTY_DRIVER_DEVPTS_MEM) != 0;
	/* Review: parallel close */
	o_tty = tty->link;

@@ -1799,9 +1797,6 @@ int tty_release(struct inode *inode, struct file *filp)
	release_tty(tty, idx);
	mutex_unlock(&tty_mutex);

	/* Make this pty number available for reallocation */
	if (devpts)
		devpts_kill_index(inode, idx);
	return 0;
}