aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/tty_io.c
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2012-06-04 07:35:35 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-06-13 20:30:54 -0400
commit9bb8a3d4109f3b267cca9f6f071e2298eed4f593 (patch)
tree7b607157c5e859024802800c6790d7e0d41fe561 /drivers/tty/tty_io.c
parentca4ff100d36b2c1da93a0a121177f73eea154471 (diff)
TTY: centralize fail paths in tty_register_driver
Currently, some failures are handled in if's false branches, some at the end of tty_register_driver via goto-labels. Let us handle the failures at the end of the functions to have the failure handling at a single place. The only thing needed is to label the lines properly and jump there. Signed-off-by: Jiri Slaby <jslaby@suse.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/tty_io.c')
-rw-r--r--drivers/tty/tty_io.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index b425c79675ad..d6e045b7079a 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -3144,10 +3144,8 @@ int tty_register_driver(struct tty_driver *driver)
3144 dev = MKDEV(driver->major, driver->minor_start); 3144 dev = MKDEV(driver->major, driver->minor_start);
3145 error = register_chrdev_region(dev, driver->num, driver->name); 3145 error = register_chrdev_region(dev, driver->num, driver->name);
3146 } 3146 }
3147 if (error < 0) { 3147 if (error < 0)
3148 kfree(p); 3148 goto err_free_p;
3149 return error;
3150 }
3151 3149
3152 if (p) { 3150 if (p) {
3153 driver->ttys = (struct tty_struct **)p; 3151 driver->ttys = (struct tty_struct **)p;
@@ -3160,13 +3158,8 @@ int tty_register_driver(struct tty_driver *driver)
3160 cdev_init(&driver->cdev, &tty_fops); 3158 cdev_init(&driver->cdev, &tty_fops);
3161 driver->cdev.owner = driver->owner; 3159 driver->cdev.owner = driver->owner;
3162 error = cdev_add(&driver->cdev, dev, driver->num); 3160 error = cdev_add(&driver->cdev, dev, driver->num);
3163 if (error) { 3161 if (error)
3164 unregister_chrdev_region(dev, driver->num); 3162 goto err_unreg_char;
3165 driver->ttys = NULL;
3166 driver->termios = NULL;
3167 kfree(p);
3168 return error;
3169 }
3170 3163
3171 mutex_lock(&tty_mutex); 3164 mutex_lock(&tty_mutex);
3172 list_add(&driver->tty_drivers, &tty_drivers); 3165 list_add(&driver->tty_drivers, &tty_drivers);
@@ -3193,13 +3186,14 @@ err:
3193 list_del(&driver->tty_drivers); 3186 list_del(&driver->tty_drivers);
3194 mutex_unlock(&tty_mutex); 3187 mutex_unlock(&tty_mutex);
3195 3188
3189err_unreg_char:
3196 unregister_chrdev_region(dev, driver->num); 3190 unregister_chrdev_region(dev, driver->num);
3197 driver->ttys = NULL; 3191 driver->ttys = NULL;
3198 driver->termios = NULL; 3192 driver->termios = NULL;
3193err_free_p:
3199 kfree(p); 3194 kfree(p);
3200 return error; 3195 return error;
3201} 3196}
3202
3203EXPORT_SYMBOL(tty_register_driver); 3197EXPORT_SYMBOL(tty_register_driver);
3204 3198
3205/* 3199/*