staging: dgap: Simplify and cleanup dgap_init_module function
authorMark Hounschell <markh@compro.net>
Thu, 6 Mar 2014 20:25:19 +0000 (15:25 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 6 Mar 2014 22:16:40 +0000 (14:16 -0800)
This patch simplifies and cleans up the dgap_init_module function. It also fixes
a possible double free condition as a result pci_unregister_driver possibly
being called twice.

Signed-off-by: Mark Hounschell <markh@compro.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/dgap/dgap.c

index 3e7cb18f614c8a56d9bd9e4d4220fa5141d23e55..d00283a226a2b7c7e74dda84a00b4258c4b5d27e 100644 (file)
@@ -519,37 +519,25 @@ static int dgap_init_module(void)
 
        dgap_driver_state = DRIVER_NEED_CONFIG_LOAD;
 
-       /*
-        * Initialize global stuff
-        */
        rc = dgap_start();
-
-       if (rc < 0)
+       if (rc)
                return rc;
 
-       /*
-        * Find and configure all the cards
-        */
        rc = dgap_init_pci();
+       if (rc)
+               goto err_cleanup;
 
-       /*
-        * If something went wrong in the scan, bail out of driver.
-        */
-       if (rc < 0) {
-               /* Only unregister the pci driver if it was actually registered. */
-               if (dgap_NumBoards)
-                       pci_unregister_driver(&dgap_driver);
-               else
-                       pr_err("dgap: driver load failed. No boards found.\n");
+       rc = dgap_create_driver_sysfiles(&dgap_driver);
+       if (rc)
+               goto err_cleanup;
 
-               dgap_cleanup_module();
-       } else {
-               rc = dgap_create_driver_sysfiles(&dgap_driver);
-               if (rc)
-                       dgap_cleanup_module();
-               else
-                       dgap_driver_state = DRIVER_READY;
-       }
+       dgap_driver_state = DRIVER_READY;
+
+       return 0;
+
+err_cleanup:
+
+       dgap_cleanup_module();
 
        return rc;
 }