aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2011-10-12 05:32:45 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-10-18 19:39:44 -0400
commit631180aca723cb92e128fdac5fd144e913ca84e5 (patch)
treeeaf96c5d9c0c93ff6459a85110d62bd771c29eaf /drivers/tty
parent1177c0efc04d032644895b8d757f55b433912596 (diff)
TTY: call tty_driver_lookup_tty unconditionally
Commit 4a2b5fddd5 (Move tty lookup/reopen to caller) made the call to tty_driver_lookup_tty conditional in tty_open. It doesn't look like it was an intention. Or if it was, it was not documented in the changelog and the code now looks weird. For example there would be no need to remember the tty driver and tty index. Further the condition depends on a tty which we drop a reference of already. If I'm looking correctly, this should not matter thanks to the locking currently done there. Thus, tty_driver->ttys[idx] cannot change under our hands. But anyway, it makes sense to change that to the old behaviour. Introduced-in: v2.6.28-rc2 Signed-off-by: Jiri Slaby <jslaby@suse.cz> Cc: stable <stable@vger.kernel.org> Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com> Cc: Alan Cox <alan@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/tty_io.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 767ecbb4761a..0425170d9ed6 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -1821,7 +1821,7 @@ int tty_release(struct inode *inode, struct file *filp)
1821 1821
1822static int tty_open(struct inode *inode, struct file *filp) 1822static int tty_open(struct inode *inode, struct file *filp)
1823{ 1823{
1824 struct tty_struct *tty = NULL; 1824 struct tty_struct *tty;
1825 int noctty, retval; 1825 int noctty, retval;
1826 struct tty_driver *driver; 1826 struct tty_driver *driver;
1827 int index; 1827 int index;
@@ -1892,17 +1892,14 @@ retry_open:
1892 return -ENODEV; 1892 return -ENODEV;
1893 } 1893 }
1894got_driver: 1894got_driver:
1895 if (!tty) { 1895 /* check whether we're reopening an existing tty */
1896 /* check whether we're reopening an existing tty */ 1896 tty = tty_driver_lookup_tty(driver, inode, index);
1897 tty = tty_driver_lookup_tty(driver, inode, index); 1897 if (IS_ERR(tty)) {
1898 1898 tty_unlock();
1899 if (IS_ERR(tty)) { 1899 mutex_unlock(&tty_mutex);
1900 tty_unlock(); 1900 tty_driver_kref_put(driver);
1901 mutex_unlock(&tty_mutex); 1901 tty_free_file(filp);
1902 tty_driver_kref_put(driver); 1902 return PTR_ERR(tty);
1903 tty_free_file(filp);
1904 return PTR_ERR(tty);
1905 }
1906 } 1903 }
1907 1904
1908 if (tty) { 1905 if (tty) {