Patch "tty: Wait interruptibly for tty lock on reopen" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
tty: Wait interruptibly for tty lock on reopen
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
tty-wait-interruptibly-for-tty-lock-on-reopen.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
0bfd464d3fdd5bb322f9cace4cc47f1796545cf7Mon Sep 17 00:00:00 2001
From: Peter Hurley <[email protected]>
Date: Sat, 9 Jan 2016 21:13:44 -0800
Subject: tty: Wait interruptibly for tty lock on reopen
From: Peter Hurley <[email protected]>
commit 0bfd464d3fdd5bb322f9cace4cc47f1796545cf7 upstream.
Allow a signal to interrupt the wait for a tty reopen; eg., if the tty has starting final close and is waiting for the device to drain.
--- drivers/tty/tty_io.c | 8 +++++++- drivers/tty/tty_mutex.c | 8 ++++++++ include/linux/tty.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-)
drivers/tty/tty_io.c +7 -1
@@ -2069,7 +2069,12 @@ retry_open:if (tty) {mutex_unlock (&tty_mutex); -tty_lock (tty); + retval =tty_lock_interruptible (tty); +if (retval) { +if (retval == -EINTR ) + retval = -ERESTARTSYS ; + goto err_unref; + }/* safe to drop the kref from tty_driver_lookup_tty() */ tty_kref_put (tty); retval =tty_reopen (tty);
@@ -2156,6 +2161,7 @@ retry_open:return 0 ; err_unlock:mutex_unlock (&tty_mutex); +err_unref:/* after locks to avoid deadlock */ if (!IS_ERR_OR_NULL (driver))tty_driver_kref_put (driver);
drivers/tty/tty_mutex.c +8 -0
@@ -22,6 +22,14 @@ void __lockfunc tty_lock(struct tty_stru }EXPORT_SYMBOL (tty_lock); +int tty_lock_interruptible (struct tty_struct *tty) +{ +if (WARN (tty->magic !=TTY_MAGIC ,"L Bad %p\n" , tty)) +return -EIO ; +tty_kref_get (tty); +return mutex_lock_interruptible (&tty->legacy_mutex); +} + void __lockfunc tty_unlock(struct tty_struct *tty) {if (tty->magic !=TTY_MAGIC ) {
include/linux/tty.h +1 -0
@@ -654,6 +654,7 @@ extern long vt_compat_ioctl(struct tty_s/* tty_mutex.c */ /* functions for preparation of BKL removal */ extern void __lockfunc tty_lock(struct tty_struct *tty); +extern int tty_lock_interruptible (struct tty_struct *tty); extern void __lockfunc tty_unlock(struct tty_struct *tty); extern void __lockfunc tty_lock_slave(struct tty_struct *tty); extern void __lockfunc tty_unlock_slave(struct tty_struct *tty);
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/tty-wait-interruptibly-for-tty-lock-on-reopen.patch queue-4.4/n_tty-fix-unsafe-reference-to-other-ldisc.patch queue-4.4/tty-fix-unsafe-ldisc-reference-via-ioctl-tiocgetd.patch queue-4.4/tty-retry-failed-reopen-if-tty-teardown-in-progress.patch