tty: Fix BKL taken under a spinlock bug introduced in the BKL split
The fasync path takes the BKL (it probably doesn't need to in fact) while holding the file_list spinlock. You can't do that with the kernel lock: it causes lock inversions and deadlocks. Leave the BKL over that bit for the moment. Identified by AKPM. Signed-off-by: Alan Cox <alan@linux.intel.com> Acked-and-Tested-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
09cea96caa
commit
6698e34720
|
@ -516,7 +516,6 @@ static void do_tty_hangup(struct work_struct *work)
|
||||||
/* inuse_filps is protected by the single kernel lock */
|
/* inuse_filps is protected by the single kernel lock */
|
||||||
lock_kernel();
|
lock_kernel();
|
||||||
check_tty_count(tty, "do_tty_hangup");
|
check_tty_count(tty, "do_tty_hangup");
|
||||||
unlock_kernel();
|
|
||||||
|
|
||||||
file_list_lock();
|
file_list_lock();
|
||||||
/* This breaks for file handles being sent over AF_UNIX sockets ? */
|
/* This breaks for file handles being sent over AF_UNIX sockets ? */
|
||||||
|
@ -531,7 +530,6 @@ static void do_tty_hangup(struct work_struct *work)
|
||||||
}
|
}
|
||||||
file_list_unlock();
|
file_list_unlock();
|
||||||
|
|
||||||
lock_kernel();
|
|
||||||
tty_ldisc_hangup(tty);
|
tty_ldisc_hangup(tty);
|
||||||
|
|
||||||
read_lock(&tasklist_lock);
|
read_lock(&tasklist_lock);
|
||||||
|
|
Loading…
Reference in New Issue