Unregister the inet notifier during ocrdma unload to avoid the panic after
driver unload.

Signed-off-by: Selvin Xavier <[email protected]>
Signed-off-by: Devesh Sharma <[email protected]>
---
 drivers/infiniband/hw/ocrdma/ocrdma_main.c |   16 ++++++++++++++--
 1 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_main.c 
b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
index 1a8a945..d75a718 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
@@ -487,6 +487,11 @@ static void ocrdma_unregister_inet6addr_notifier(void)
 #endif
 }
 
+static void ocrdma_unregister_inetaddr_notifier(void)
+{
+       unregister_inetaddr_notifier(&ocrdma_inetaddr_notifier);
+}
+
 static int __init ocrdma_init_module(void)
 {
        int status;
@@ -498,13 +503,19 @@ static int __init ocrdma_init_module(void)
 #if IS_ENABLED(CONFIG_IPV6)
        status = register_inet6addr_notifier(&ocrdma_inet6addr_notifier);
        if (status)
-               return status;
+               goto err_notifier6;
 #endif
 
        status = be_roce_register_driver(&ocrdma_drv);
        if (status)
-               ocrdma_unregister_inet6addr_notifier();
+               goto err_be_reg;
 
+       return 0;
+
+err_be_reg:
+       ocrdma_unregister_inet6addr_notifier();
+err_notifier6:
+       ocrdma_unregister_inetaddr_notifier();
        return status;
 }
 
@@ -512,6 +523,7 @@ static void __exit ocrdma_exit_module(void)
 {
        be_roce_unregister_driver(&ocrdma_drv);
        ocrdma_unregister_inet6addr_notifier();
+       ocrdma_unregister_inetaddr_notifier();
 }
 
 module_init(ocrdma_init_module);
-- 
1.6.0.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to