aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Cox <alan@linux.intel.com>2009-11-30 13:18:51 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2009-12-11 15:18:08 -0800
commit36ba782e9674cdc29ec7003757df0b375e99fa96 (patch)
treeb434105bf8a04b6b357b5063ce146169ab811bc1
parenttty: Move the leader test in disassociate (diff)
downloadlinux-dev-36ba782e9674cdc29ec7003757df0b375e99fa96.tar.xz
linux-dev-36ba782e9674cdc29ec7003757df0b375e99fa96.zip
tty: split the lock up a bit further
The tty count sanity check may need the BKL, that isn't clear. However it is clear that the count use of the lock is internal and independant of the bigger use of the lock. Furthermore the file list locking is also separately locked already Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/char/tty_io.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index a19fef2093f1..684f0e0b175e 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -516,6 +516,8 @@ static void do_tty_hangup(struct work_struct *work)
/* inuse_filps is protected by the single kernel lock */
lock_kernel();
check_tty_count(tty, "do_tty_hangup");
+ unlock_kernel();
+
file_list_lock();
/* This breaks for file handles being sent over AF_UNIX sockets ? */
list_for_each_entry(filp, &tty->tty_files, f_u.fu_list) {
@@ -529,6 +531,7 @@ static void do_tty_hangup(struct work_struct *work)
}
file_list_unlock();
+ lock_kernel();
tty_ldisc_hangup(tty);
read_lock(&tasklist_lock);