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 <ma...@compro.net>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/dgap/dgap.c | 38 +++++++++++++-------------------------
 1 file changed, 13 insertions(+), 25 deletions(-)

diff --git a/drivers/staging/dgap/dgap.c b/drivers/staging/dgap/dgap.c
index 3e7cb18..d00283a 100644
--- a/drivers/staging/dgap/dgap.c
+++ b/drivers/staging/dgap/dgap.c
@@ -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;
 }
-- 
1.8.1.4

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to