Commit f446776e authored by Corey Minyard's avatar Corey Minyard Committed by Greg Kroah-Hartman
Browse files

tty: Export redirect release



This will be required by the pty code when it removes tty_vhangup() on
master close.

Signed-off-by: default avatarCorey Minyard <cminyard@mvista.com>
Link: https://lore.kernel.org/r/20201124004902.1398477-2-minyard@acm.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent c31c3ea0
Loading
Loading
Loading
Loading
+24 −8
Original line number Diff line number Diff line
@@ -540,6 +540,28 @@ void tty_wakeup(struct tty_struct *tty)

EXPORT_SYMBOL_GPL(tty_wakeup);

/**
 *	tty_release_redirect	-	Release a redirect on a pty if present
 *	@tty: tty device
 *
 *	This is available to the pty code so if the master closes, if the
 *	slave is a redirect it can release the redirect.
 */
struct file *tty_release_redirect(struct tty_struct *tty)
{
	struct file *f = NULL;

	spin_lock(&redirect_lock);
	if (redirect && file_tty(redirect) == tty) {
		f = redirect;
		redirect = NULL;
	}
	spin_unlock(&redirect_lock);

	return f;
}
EXPORT_SYMBOL_GPL(tty_release_redirect);

/**
 *	__tty_hangup		-	actual handler for hangup events
 *	@tty: tty device
@@ -566,7 +588,7 @@ EXPORT_SYMBOL_GPL(tty_wakeup);
static void __tty_hangup(struct tty_struct *tty, int exit_session)
{
	struct file *cons_filp = NULL;
	struct file *filp, *f = NULL;
	struct file *filp, *f;
	struct tty_file_private *priv;
	int    closecount = 0, n;
	int refs;
@@ -574,13 +596,7 @@ static void __tty_hangup(struct tty_struct *tty, int exit_session)
	if (!tty)
		return;


	spin_lock(&redirect_lock);
	if (redirect && file_tty(redirect) == tty) {
		f = redirect;
		redirect = NULL;
	}
	spin_unlock(&redirect_lock);
	f = tty_release_redirect(tty);

	tty_lock(tty);

+1 −0
Original line number Diff line number Diff line
@@ -421,6 +421,7 @@ extern void tty_kclose(struct tty_struct *tty);
extern int tty_dev_name_to_number(const char *name, dev_t *number);
extern int tty_ldisc_lock(struct tty_struct *tty, unsigned long timeout);
extern void tty_ldisc_unlock(struct tty_struct *tty);
extern struct file *tty_release_redirect(struct tty_struct *tty);
#else
static inline void tty_kref_put(struct tty_struct *tty)
{ }