Skip to content

Commit 942b483

Browse files
niharcygregkh
authored andcommitted
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 <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 635ddb8 commit 942b483

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

drivers/staging/gpib/pc2/pc2_gpib.c

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -635,12 +635,42 @@ void pc2_2a_detach(gpib_board_t *board)
635635

636636
static int __init pc2_init_module(void)
637637
{
638-
gpib_register_driver(&pc2_interface, THIS_MODULE);
639-
gpib_register_driver(&pc2a_interface, THIS_MODULE);
640-
gpib_register_driver(&pc2a_cb7210_interface, THIS_MODULE);
641-
gpib_register_driver(&pc2_2a_interface, THIS_MODULE);
638+
int ret;
639+
640+
ret = gpib_register_driver(&pc2_interface, THIS_MODULE);
641+
if (ret) {
642+
pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
643+
return ret;
644+
}
645+
646+
ret = gpib_register_driver(&pc2a_interface, THIS_MODULE);
647+
if (ret) {
648+
pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
649+
goto err_pc2a;
650+
}
651+
652+
ret = gpib_register_driver(&pc2a_cb7210_interface, THIS_MODULE);
653+
if (ret) {
654+
pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
655+
goto err_cb7210;
656+
}
657+
658+
ret = gpib_register_driver(&pc2_2a_interface, THIS_MODULE);
659+
if (ret) {
660+
pr_err("pc2_gpib: gpib_register_driver failed: error = %d\n", ret);
661+
goto err_pc2_2a;
662+
}
642663

643664
return 0;
665+
666+
err_pc2_2a:
667+
gpib_unregister_driver(&pc2a_cb7210_interface);
668+
err_cb7210:
669+
gpib_unregister_driver(&pc2a_interface);
670+
err_pc2a:
671+
gpib_unregister_driver(&pc2_interface);
672+
673+
return ret;
644674
}
645675

646676
static void __exit pc2_exit_module(void)

0 commit comments

Comments
 (0)