Skip to content

Commit

Permalink
TTY: synclink_cs, sanitize fail paths
Browse files Browse the repository at this point in the history
We will need to change the order of tty and pcmcia drivers
initializations (see the reason later in this series). And the fail
path handling is currently performed in a separate function that as
well takes care of proper deinitialization in module_exit. It is hard
to read and will need to be adjusted by our changes anyway. Instead,
get rid of this helper function and do the fail paths handling
directly in the init function. (And move the body of the function to
module_exit.)

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Jiri Slaby authored and Greg Kroah-Hartman committed Aug 13, 2012
1 parent b19e2ca commit 737586f
Showing 1 changed file with 14 additions and 27 deletions.
41 changes: 14 additions & 27 deletions drivers/char/pcmcia/synclink_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -2798,23 +2798,6 @@ static const struct tty_operations mgslpc_ops = {
.proc_fops = &mgslpc_proc_fops,
};

static void synclink_cs_cleanup(void)
{
int rc;

while(mgslpc_device_list)
mgslpc_remove_device(mgslpc_device_list);

if (serial_driver) {
if ((rc = tty_unregister_driver(serial_driver)))
printk("%s(%d) failed to unregister tty driver err=%d\n",
__FILE__,__LINE__,rc);
put_tty_driver(serial_driver);
}

pcmcia_unregister_driver(&mgslpc_driver);
}

static int __init synclink_cs_init(void)
{
int rc;
Expand All @@ -2830,7 +2813,7 @@ static int __init synclink_cs_init(void)
serial_driver = alloc_tty_driver(MAX_DEVICE_COUNT);
if (!serial_driver) {
rc = -ENOMEM;
goto error;
goto err_pcmcia_drv;
}

/* Initialize the tty_driver structure */
Expand All @@ -2850,25 +2833,29 @@ static int __init synclink_cs_init(void)
if ((rc = tty_register_driver(serial_driver)) < 0) {
printk("%s(%d):Couldn't register serial driver\n",
__FILE__,__LINE__);
put_tty_driver(serial_driver);
serial_driver = NULL;
goto error;
goto err_put_tty;
}

printk("%s %s, tty major#%d\n",
driver_name, driver_version,
serial_driver->major);

return 0;

error:
synclink_cs_cleanup();
return rc;
return 0;
err_put_tty:
put_tty_driver(serial_driver);
err_pcmcia_drv:
pcmcia_unregister_driver(&mgslpc_driver);
return rc;
}

static void __exit synclink_cs_exit(void)
{
synclink_cs_cleanup();
while (mgslpc_device_list)
mgslpc_remove_device(mgslpc_device_list);

tty_unregister_driver(serial_driver);
put_tty_driver(serial_driver);
pcmcia_unregister_driver(&mgslpc_driver);
}

module_init(synclink_cs_init);
Expand Down

0 comments on commit 737586f

Please sign in to comment.