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>
        /* 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 ? */
        }
        file_list_unlock();
 
-       lock_kernel();
        tty_ldisc_hangup(tty);
 
        read_lock(&tasklist_lock);