]> www.infradead.org Git - users/willy/linux.git/commitdiff
staging: gpib: pc2: Handle gpib_register_driver() errors
authorNihar Chaithanya <niharchaithanya@gmail.com>
Mon, 30 Dec 2024 18:56:34 +0000 (00:26 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 7 Jan 2025 14:38:56 +0000 (15:38 +0100)
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 gpib registering functions if subsequent
gpib_register_driver() fail and return the error value. Add pr_err()
statements indicating the fail and error value.

Signed-off-by: Nihar Chaithanya <niharchaithanya@gmail.com>
Link: https://lore.kernel.org/r/20241230185633.175690-15-niharchaithanya@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/gpib/pc2/pc2_gpib.c

index 7b3b34f4734168eb01859ae1bfe428dcb6fb8783..a9aae563f60a9d93a27ecf8805f356f23c8574ac 100644 (file)
@@ -635,12 +635,42 @@ void pc2_2a_detach(gpib_board_t *board)
 
 static int __init pc2_init_module(void)
 {
-       gpib_register_driver(&pc2_interface, THIS_MODULE);
-       gpib_register_driver(&pc2a_interface, THIS_MODULE);
-       gpib_register_driver(&pc2a_cb7210_interface, THIS_MODULE);
-       gpib_register_driver(&pc2_2a_interface, THIS_MODULE);
+       int ret;
+
+       ret = gpib_register_driver(&pc2_interface, THIS_MODULE);
+       if (ret) {
+               pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
+               return ret;
+       }
+
+       ret = gpib_register_driver(&pc2a_interface, THIS_MODULE);
+       if (ret) {
+               pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
+               goto err_pc2a;
+       }
+
+       ret = gpib_register_driver(&pc2a_cb7210_interface, THIS_MODULE);
+       if (ret) {
+               pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
+               goto err_cb7210;
+       }
+
+       ret = gpib_register_driver(&pc2_2a_interface, THIS_MODULE);
+       if (ret) {
+               pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
+               goto err_pc2_2a;
+       }
 
        return 0;
+
+err_pc2_2a:
+       gpib_unregister_driver(&pc2a_cb7210_interface);
+err_cb7210:
+       gpib_unregister_driver(&pc2a_interface);
+err_pc2a:
+       gpib_unregister_driver(&pc2_interface);
+
+       return ret;
 }
 
 static void __exit pc2_exit_module(void)