Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9dacf3b2f0cc657a5621e7f6d67ed27ce598f405
Commit:     9dacf3b2f0cc657a5621e7f6d67ed27ce598f405
Parent:     14a55a6789d8409e58329310f9a18fc141deb4c2
Author:     Jiri Slaby <[EMAIL PROTECTED]>
AuthorDate: Tue May 8 00:36:20 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue May 8 11:15:23 2007 -0700

    Char: cyclades, cy_init error handling
    
    - do not panic if tty_register_driver fails
    - handle fail paths properly
    
    Signed-off-by: Jiri Slaby <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/char/cyclades.c |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c
index 1fe0bb6..970d99a 100644
--- a/drivers/char/cyclades.c
+++ b/drivers/char/cyclades.c
@@ -5460,10 +5460,11 @@ static const struct tty_operations cy_ops = {
 static int __init cy_init(void)
 {
        unsigned int i, nboards;
+       int retval = -ENOMEM;
 
        cy_serial_driver = alloc_tty_driver(NR_PORTS);
        if (!cy_serial_driver)
-               return -ENOMEM;
+               goto err;
        show_version();
 
        /* Initialize the tty_driver structure */
@@ -5481,8 +5482,11 @@ static int __init cy_init(void)
        cy_serial_driver->flags = TTY_DRIVER_REAL_RAW;
        tty_set_operations(cy_serial_driver, &cy_ops);
 
-       if (tty_register_driver(cy_serial_driver))
-               panic("Couldn't register Cyclades serial driver\n");
+       retval = tty_register_driver(cy_serial_driver);
+       if (retval) {
+               printk(KERN_ERR "Couldn't register Cyclades serial driver\n");
+               goto err_frtty;
+       }
 
        for (i = 0; i < NR_CARDS; i++) {
                /* base_addr=0 indicates board not found */
@@ -5508,7 +5512,18 @@ static int __init cy_init(void)
        /* look for pci boards */
        nboards += cy_detect_pci();
 
-       return nboards ? 0 : -ENODEV;
+       if (nboards == 0) {
+               retval = -ENODEV;
+               goto err_unr;
+       }
+
+       return 0;
+err_unr:
+       tty_unregister_driver(cy_serial_driver);
+err_frtty:
+       put_tty_driver(cy_serial_driver);
+err:
+       return retval;
 }                              /* cy_init */
 
 static void __exit cy_cleanup_module(void)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to