{
        struct tty_struct *tty;
 
-       mutex_lock(&tty_mutex);
        tty = get_current_tty();
        if (tty) {
                tty_vhangup(tty);
                tty_kref_put(tty);
        }
-       mutex_unlock(&tty_mutex);
 }
 
 /**
        struct pid *tty_pgrp = NULL;
 
 
-       mutex_lock(&tty_mutex);
        tty = get_current_tty();
        if (tty) {
                tty_pgrp = get_pid(tty->pgrp);
-               mutex_unlock(&tty_mutex);
                lock_kernel();
                if (on_exit && tty->driver->type != TTY_DRIVER_TYPE_PTY)
                        tty_vhangup(tty);
                        kill_pgrp(old_pgrp, SIGCONT, on_exit);
                        put_pid(old_pgrp);
                }
-               mutex_unlock(&tty_mutex);
                return;
        }
        if (tty_pgrp) {
        current->signal->tty_old_pgrp = NULL;
        spin_unlock_irq(¤t->sighand->siglock);
 
-       mutex_lock(&tty_mutex);
        tty = get_current_tty();
        if (tty) {
                unsigned long flags;
                       " = NULL", tty);
 #endif
        }
-       mutex_unlock(&tty_mutex);
 
        /* Now clear signal->tty under the lock */
        read_lock(&tasklist_lock);
 struct tty_struct *get_current_tty(void)
 {
        struct tty_struct *tty;
-       WARN_ON_ONCE(!mutex_is_locked(&tty_mutex));
+       unsigned long flags;
+
+       spin_lock_irqsave(¤t->sighand->siglock, flags);
        tty = tty_kref_get(current->signal->tty);
-       /*
-        * session->tty can be changed/cleared from under us, make sure we
-        * issue the load. The obtained pointer, when not NULL, is valid as
-        * long as we hold tty_mutex.
-        */
-       barrier();
+       spin_unlock_irqrestore(¤t->sighand->siglock, flags);
        return tty;
 }
 EXPORT_SYMBOL_GPL(get_current_tty);
 
            warntype == QUOTA_NL_BSOFTBELOW || !need_print_warning(dquot))
                return;
 
-       mutex_lock(&tty_mutex);
        tty = get_current_tty();
-       mutex_unlock(&tty_mutex);
        if (!tty)
                return;
        tty_write_message(tty, dquot->dq_sb->s_id);