staging: gpib: pc2: Handle gpib_register_driver() errors

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>
This commit is contained in:
Nihar Chaithanya 2024-12-31 00:26:34 +05:30 committed by Greg Kroah-Hartman
parent 635ddb8ccd
commit 942b483ef3

View 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)