patch "tty: Wait interruptibly for tty lock on reopen" added to tty-testing
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 my tty git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
in the tty-testing branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will be merged to the tty-next branch sometime soon, after it passes testing, and the merge window is open.
If you have any questions about this process, please let me know.
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
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
@@ -2065,7 +2065,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);
@@ -2152,6 +2157,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
@@ -19,6 +19,14 @@ void __lockfunc tty_lock(struct tty_struct *tty) }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 (WARN (tty->magic !=TTY_MAGIC ,"U Bad %p\n" , tty))
include/linux/tty.h +1 -0
@@ -649,6 +649,7 @@ extern long vt_compat_ioctl(struct tty_struct *tty,/* 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);
Signature · 1 line
2.7.0