TTY: centralize fail paths in tty_register_driver
authorJiri Slaby <jslaby@suse.cz>
Mon, 4 Jun 2012 11:35:35 +0000 (13:35 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 14 Jun 2012 00:30:54 +0000 (17:30 -0700)
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>
drivers/tty/tty_io.c

index b425c79..d6e045b 100644 (file)
@@ -3144,10 +3144,8 @@ int tty_register_driver(struct tty_driver *driver)
                dev = MKDEV(driver->major, driver->minor_start);
                error = register_chrdev_region(dev, driver->num, driver->name);
        }
-       if (error < 0) {
-               kfree(p);
-               return error;
-       }
+       if (error < 0)
+               goto err_free_p;
 
        if (p) {
                driver->ttys = (struct tty_struct **)p;
@@ -3160,13 +3158,8 @@ int tty_register_driver(struct tty_driver *driver)
        cdev_init(&driver->cdev, &tty_fops);
        driver->cdev.owner = driver->owner;
        error = cdev_add(&driver->cdev, dev, driver->num);
-       if (error) {
-               unregister_chrdev_region(dev, driver->num);
-               driver->ttys = NULL;
-               driver->termios = NULL;
-               kfree(p);
-               return error;
-       }
+       if (error)
+               goto err_unreg_char;
 
        mutex_lock(&tty_mutex);
        list_add(&driver->tty_drivers, &tty_drivers);
@@ -3193,13 +3186,14 @@ err:
        list_del(&driver->tty_drivers);
        mutex_unlock(&tty_mutex);
 
+err_unreg_char:
        unregister_chrdev_region(dev, driver->num);
        driver->ttys = NULL;
        driver->termios = NULL;
+err_free_p:
        kfree(p);
        return error;
 }
-
 EXPORT_SYMBOL(tty_register_driver);
 
 /*