[PATCH v5 06/15] staging: gpib: fluke: Handle gpib_register_driver() errors
From: Nihar Chaithanya
Date: Sat Dec 28 2024 - 01:26:49 EST
The function gpib_register_driver() can fail, resulting in a
semi-registered module and does not return an error value if it
fails.
Unregister the previous platform driver and gpib registering
functions if subsequent gpib_register_driver() fail and return the
error value.
Signed-off-by: Nihar Chaithanya <niharchaithanya@xxxxxxxxx>
---
drivers/staging/gpib/eastwood/fluke_gpib.c | 28 ++++++++++++++++++----
1 file changed, 23 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/gpib/eastwood/fluke_gpib.c b/drivers/staging/gpib/eastwood/fluke_gpib.c
index 3f938ab0c84d..285dd5e5ebfc 100644
--- a/drivers/staging/gpib/eastwood/fluke_gpib.c
+++ b/drivers/staging/gpib/eastwood/fluke_gpib.c
@@ -1155,16 +1155,34 @@ static int __init fluke_init_module(void)
result = platform_driver_register(&fluke_gpib_platform_driver);
if (result) {
- pr_err("fluke_gpib: platform_driver_register failed!\n");
+ pr_err("fluke_gpib: platform_driver_register failed: error = %d\n", result);
return result;
}
- gpib_register_driver(&fluke_unaccel_interface, THIS_MODULE);
- gpib_register_driver(&fluke_hybrid_interface, THIS_MODULE);
- gpib_register_driver(&fluke_interface, THIS_MODULE);
+ result = gpib_register_driver(&fluke_unaccel_interface, THIS_MODULE);
+ if (result)
+ goto err_unaccel;
- pr_info("fluke_gpib\n");
+ result = gpib_register_driver(&fluke_hybrid_interface, THIS_MODULE);
+ if (result)
+ goto err_hybrid;
+
+ result = gpib_register_driver(&fluke_interface, THIS_MODULE);
+ if (result)
+ goto err_interface;
+
+ pr_info("fluke_gpib: module init is complete\n");
return 0;
+
+err_interface:
+ gpib_unregister_driver(&fluke_hybrid_interface);
+err_hybrid:
+ gpib_unregister_driver(&fluke_unaccel_interface);
+err_unaccel:
+ platform_driver_unregister(&fluke_gpib_platform_driver);
+
+ pr_err("fluke_gpib: gpib_register_driver failed!\n");
+ return result;
}
static void __exit fluke_exit_module(void)
--
2.34.1