diff options
author | Jiri Slaby <jslaby@suse.cz> | 2012-06-04 07:35:35 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-06-13 20:30:54 -0400 |
commit | 9bb8a3d4109f3b267cca9f6f071e2298eed4f593 (patch) | |
tree | 7b607157c5e859024802800c6790d7e0d41fe561 /drivers/tty/tty_io.c | |
parent | ca4ff100d36b2c1da93a0a121177f73eea154471 (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.c | 18 |
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 | ||
3189 | err_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; |
3193 | err_free_p: | ||
3199 | kfree(p); | 3194 | kfree(p); |
3200 | return error; | 3195 | return error; |
3201 | } | 3196 | } |
3202 | |||
3203 | EXPORT_SYMBOL(tty_register_driver); | 3197 | EXPORT_SYMBOL(tty_register_driver); |
3204 | 3198 | ||
3205 | /* | 3199 | /* |