net: defxx: Fix missing err handling in dfx_init()
authorYongqiang Liu <liuyongqiang13@huawei.com>
Wed, 7 Dec 2022 07:20:45 +0000 (07:20 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:14:18 +0000 (13:14 +0100)
[ Upstream commit ae18dcdff0f8d7e84cd3fd9f496518b5e72d185d ]

When eisa_driver_register() or tc_register_driver() failed,
the modprobe defxx would fail with some err log as follows:

 Error: Driver 'defxx' is already registered, aborting...

Fix this issue by adding err hanling in dfx_init().

Fixes: e89a2cfb7d7b5 ("[TC] defxx: TURBOchannel support")
Signed-off-by: Yongqiang Liu <liuyongqiang13@huawei.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/fddi/defxx.c

index 6d1e3f4..ebf5022 100644 (file)
@@ -3831,10 +3831,24 @@ static int dfx_init(void)
        int status;
 
        status = pci_register_driver(&dfx_pci_driver);
-       if (!status)
-               status = eisa_driver_register(&dfx_eisa_driver);
-       if (!status)
-               status = tc_register_driver(&dfx_tc_driver);
+       if (status)
+               goto err_pci_register;
+
+       status = eisa_driver_register(&dfx_eisa_driver);
+       if (status)
+               goto err_eisa_register;
+
+       status = tc_register_driver(&dfx_tc_driver);
+       if (status)
+               goto err_tc_register;
+
+       return 0;
+
+err_tc_register:
+       eisa_driver_unregister(&dfx_eisa_driver);
+err_eisa_register:
+       pci_unregister_driver(&dfx_pci_driver);
+err_pci_register:
        return status;
 }