aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/tty_io.c
diff options
context:
space:
mode:
authorAlan Cox <alan@linux.intel.com>2009-11-30 08:18:51 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2009-12-11 18:18:08 -0500
commit36ba782e9674cdc29ec7003757df0b375e99fa96 (patch)
treeb434105bf8a04b6b357b5063ce146169ab811bc1 /drivers/char/tty_io.c
parent5ec93d1154fd1e269162398f8e70efc7e004485d (diff)
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>
Diffstat (limited to 'drivers/char/tty_io.c')
-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)
516 /* inuse_filps is protected by the single kernel lock */ 516 /* inuse_filps is protected by the single kernel lock */
517 lock_kernel(); 517 lock_kernel();
518 check_tty_count(tty, "do_tty_hangup"); 518 check_tty_count(tty, "do_tty_hangup");
519 unlock_kernel();
520
519 file_list_lock(); 521 file_list_lock();
520 /* This breaks for file handles being sent over AF_UNIX sockets ? */ 522 /* This breaks for file handles being sent over AF_UNIX sockets ? */
521 list_for_each_entry(filp, &tty->tty_files, f_u.fu_list) { 523 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)
529 } 531 }
530 file_list_unlock(); 532 file_list_unlock();
531 533
534 lock_kernel();
532 tty_ldisc_hangup(tty); 535 tty_ldisc_hangup(tty);
533 536
534 read_lock(&tasklist_lock); 537 read_lock(&tasklist_lock);