aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/tty_io.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/tty_io.c')
-rw-r--r--drivers/char/tty_io.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/char/tty_io.c b/drivers/char/tty_io.c
index 613c852ee0fe..dc184d4b5638 100644
--- a/drivers/char/tty_io.c
+++ b/drivers/char/tty_io.c
@@ -183,6 +183,8 @@ struct tty_struct *alloc_tty_struct(void)
183 183
184void free_tty_struct(struct tty_struct *tty) 184void free_tty_struct(struct tty_struct *tty)
185{ 185{
186 if (tty->dev)
187 put_device(tty->dev);
186 kfree(tty->write_buf); 188 kfree(tty->write_buf);
187 tty_buffer_free_all(tty); 189 tty_buffer_free_all(tty);
188 kfree(tty); 190 kfree(tty);
@@ -2783,6 +2785,20 @@ void do_SAK(struct tty_struct *tty)
2783 2785
2784EXPORT_SYMBOL(do_SAK); 2786EXPORT_SYMBOL(do_SAK);
2785 2787
2788static int dev_match_devt(struct device *dev, void *data)
2789{
2790 dev_t *devt = data;
2791 return dev->devt == *devt;
2792}
2793
2794/* Must put_device() after it's unused! */
2795static struct device *tty_get_device(struct tty_struct *tty)
2796{
2797 dev_t devt = tty_devnum(tty);
2798 return class_find_device(tty_class, NULL, &devt, dev_match_devt);
2799}
2800
2801
2786/** 2802/**
2787 * initialize_tty_struct 2803 * initialize_tty_struct
2788 * @tty: tty to initialize 2804 * @tty: tty to initialize
@@ -2823,6 +2839,7 @@ void initialize_tty_struct(struct tty_struct *tty,
2823 tty->ops = driver->ops; 2839 tty->ops = driver->ops;
2824 tty->index = idx; 2840 tty->index = idx;
2825 tty_line_name(driver, idx, tty->name); 2841 tty_line_name(driver, idx, tty->name);
2842 tty->dev = tty_get_device(tty);
2826} 2843}
2827 2844
2828/** 2845/**