[PATCH 06/06] staging: dgap: Simplify and cleanup dgap_init_module function

Mark Hounschell markh at compro.net
Thu Mar 6 20:25:19 UTC 2014


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 at compro.net>
Cc: Greg Kroah-Hartman <gregkh at 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



More information about the devel mailing list