Skip to content

Commit 26098b7

Browse files
niharcygregkh
authored andcommitted
staging: gpib: ines: Handle gpib_register_driver() errors
The function ines_pcmcia_init_module() can be replaced by calling pcmcia_register_driver() directly. The error value from this function is not returned and the previous registering functions are not unregistered. The function gpib_register_driver() can fail and similar to pcmcia_register_driver() function failing, the previous registering functions are not unregistered. Replace cb_pcmcia_init_module() with pcmcia_register_driver(). Unregister the gpib and pci register functions if the subsequent gpib or pcmcia register functions 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 44aaeb2 commit 26098b7

File tree

1 file changed

+73
-21
lines changed

1 file changed

+73
-21
lines changed

drivers/staging/gpib/ines/ines_gpib.c

Lines changed: 73 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,12 +1227,6 @@ static struct pcmcia_driver ines_gpib_cs_driver = {
12271227
.resume = ines_gpib_resume,
12281228
};
12291229

1230-
int ines_pcmcia_init_module(void)
1231-
{
1232-
pcmcia_register_driver(&ines_gpib_cs_driver);
1233-
return 0;
1234-
}
1235-
12361230
void ines_pcmcia_cleanup_module(void)
12371231
{
12381232
DEBUG(0, "ines_cs: unloading\n");
@@ -1420,28 +1414,86 @@ void ines_pcmcia_detach(gpib_board_t *board)
14201414

14211415
static int __init ines_init_module(void)
14221416
{
1423-
int err = 0;
1417+
int ret;
1418+
1419+
ret = pci_register_driver(&ines_pci_driver);
1420+
if (ret) {
1421+
pr_err("ines_gpib: pci_register_driver failed: error = %d\n", ret);
1422+
return ret;
1423+
}
1424+
1425+
ret = gpib_register_driver(&ines_pci_interface, THIS_MODULE);
1426+
if (ret) {
1427+
pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret);
1428+
goto err_pci;
1429+
}
14241430

1425-
err = pci_register_driver(&ines_pci_driver);
1426-
if (err) {
1427-
pr_err("ines_gpib: pci_driver_register failed!\n");
1428-
return err;
1431+
ret = gpib_register_driver(&ines_pci_unaccel_interface, THIS_MODULE);
1432+
if (ret) {
1433+
pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret);
1434+
goto err_pci_unaccel;
1435+
}
1436+
1437+
ret = gpib_register_driver(&ines_pci_accel_interface, THIS_MODULE);
1438+
if (ret) {
1439+
pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret);
1440+
goto err_pci_accel;
1441+
}
1442+
1443+
ret = gpib_register_driver(&ines_isa_interface, THIS_MODULE);
1444+
if (ret) {
1445+
pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret);
1446+
goto err_isa;
14291447
}
14301448

1431-
gpib_register_driver(&ines_pci_interface, THIS_MODULE);
1432-
gpib_register_driver(&ines_pci_unaccel_interface, THIS_MODULE);
1433-
gpib_register_driver(&ines_pci_accel_interface, THIS_MODULE);
1434-
gpib_register_driver(&ines_isa_interface, THIS_MODULE);
14351449
#ifdef GPIB_PCMCIA
1436-
gpib_register_driver(&ines_pcmcia_interface, THIS_MODULE);
1437-
gpib_register_driver(&ines_pcmcia_unaccel_interface, THIS_MODULE);
1438-
gpib_register_driver(&ines_pcmcia_accel_interface, THIS_MODULE);
1439-
err += ines_pcmcia_init_module();
1450+
ret = gpib_register_driver(&ines_pcmcia_interface, THIS_MODULE);
1451+
if (ret) {
1452+
pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret);
1453+
goto err_pcmcia;
1454+
}
1455+
1456+
ret = gpib_register_driver(&ines_pcmcia_unaccel_interface, THIS_MODULE);
1457+
if (ret) {
1458+
pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret);
1459+
goto err_pcmcia_unaccel;
1460+
}
1461+
1462+
ret = gpib_register_driver(&ines_pcmcia_accel_interface, THIS_MODULE);
1463+
if (ret) {
1464+
pr_err("ines_gpib: gpib_register_driver failed: error = %d\n", ret);
1465+
goto err_pcmcia_accel;
1466+
}
1467+
1468+
ret = pcmcia_register_driver(&ines_gpib_cs_driver);
1469+
if (ret) {
1470+
pr_err("ines_gpib: pcmcia_register_driver failed: error = %d\n", ret);
1471+
goto err_pcmcia_driver;
1472+
}
14401473
#endif
1441-
if (err)
1442-
return -1;
14431474

14441475
return 0;
1476+
1477+
#ifdef GPIB_PCMCIA
1478+
err_pcmcia_driver:
1479+
gpib_unregister_driver(&ines_pcmcia_accel_interface);
1480+
err_pcmcia_accel:
1481+
gpib_unregister_driver(&ines_pcmcia_unaccel_interface);
1482+
err_pcmcia_unaccel:
1483+
gpib_unregister_driver(&ines_pcmcia_interface);
1484+
err_pcmcia:
1485+
#endif
1486+
gpib_unregister_driver(&ines_isa_interface);
1487+
err_isa:
1488+
gpib_unregister_driver(&ines_pci_accel_interface);
1489+
err_pci_accel:
1490+
gpib_unregister_driver(&ines_pci_unaccel_interface);
1491+
err_pci_unaccel:
1492+
gpib_unregister_driver(&ines_pci_interface);
1493+
err_pci:
1494+
pci_unregister_driver(&ines_pci_driver);
1495+
1496+
return ret;
14451497
}
14461498

14471499
static void __exit ines_exit_module(void)

0 commit comments

Comments
 (0)