tty_lock: undo the old tty_lock use on the ctty
get_current_tty has its own consistent locking. That means a pile of the tty lock cases are not needed. As get_current_tty also keeps a reference the tty object lifetime means we can propogate the lock removal out. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
22886ee968
Коммит
3af502b966
|
@ -855,10 +855,11 @@ void disassociate_ctty(int on_exit)
|
|||
*/
|
||||
void no_tty(void)
|
||||
{
|
||||
/* FIXME: Review locking here. The tty_lock never covered any race
|
||||
between a new association and proc_clear_tty but possible we need
|
||||
to protect against this anyway */
|
||||
struct task_struct *tsk = current;
|
||||
tty_lock();
|
||||
disassociate_ctty(0);
|
||||
tty_unlock();
|
||||
proc_clear_tty(tsk);
|
||||
}
|
||||
|
||||
|
@ -1800,6 +1801,9 @@ int tty_release(struct inode *inode, struct file *filp)
|
|||
*
|
||||
* We cannot return driver and index like for the other nodes because
|
||||
* devpts will not work then. It expects inodes to be from devpts FS.
|
||||
*
|
||||
* We need to move to returning a refcounted object from all the lookup
|
||||
* paths including this one.
|
||||
*/
|
||||
static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
|
||||
{
|
||||
|
@ -1816,6 +1820,7 @@ static struct tty_struct *tty_open_current_tty(dev_t device, struct file *filp)
|
|||
/* noctty = 1; */
|
||||
tty_kref_put(tty);
|
||||
/* FIXME: we put a reference and return a TTY! */
|
||||
/* This is only safe because the caller holds tty_mutex */
|
||||
return tty;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче