aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSelvin Xavier <selvin.xavier@emulex.com>2014-03-18 05:24:56 -0400
committerRoland Dreier <roland@purestorage.com>2014-04-03 11:30:07 -0400
commit2d8f57d56f5850a75d6225519e77f75ad9949f25 (patch)
tree02d1a468e68125d921f040339892e9fb95d49939
parent7a1e89d8b793feda96754fd3ba5079c4ba3862ee (diff)
RDMA/ocrdma: Unregister inet notifier when unloading ocrdma
Unregister the inet notifier during ocrdma unload to avoid a panic after driver unload. Signed-off-by: Selvin Xavier <selvin.xavier@emulex.com> Signed-off-by: Devesh Sharma <devesh.sharma@emulex.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
-rw-r--r--drivers/infiniband/hw/ocrdma/ocrdma_main.c16
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 8bd9db689b2f..7c504e079744 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_main.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_main.c
@@ -539,6 +539,11 @@ static void ocrdma_unregister_inet6addr_notifier(void)
539#endif 539#endif
540} 540}
541 541
542static void ocrdma_unregister_inetaddr_notifier(void)
543{
544 unregister_inetaddr_notifier(&ocrdma_inetaddr_notifier);
545}
546
542static int __init ocrdma_init_module(void) 547static int __init ocrdma_init_module(void)
543{ 548{
544 int status; 549 int status;
@@ -552,13 +557,19 @@ static int __init ocrdma_init_module(void)
552#if IS_ENABLED(CONFIG_IPV6) 557#if IS_ENABLED(CONFIG_IPV6)
553 status = register_inet6addr_notifier(&ocrdma_inet6addr_notifier); 558 status = register_inet6addr_notifier(&ocrdma_inet6addr_notifier);
554 if (status) 559 if (status)
555 return status; 560 goto err_notifier6;
556#endif 561#endif
557 562
558 status = be_roce_register_driver(&ocrdma_drv); 563 status = be_roce_register_driver(&ocrdma_drv);
559 if (status) 564 if (status)
560 ocrdma_unregister_inet6addr_notifier(); 565 goto err_be_reg;
561 566
567 return 0;
568
569err_be_reg:
570 ocrdma_unregister_inet6addr_notifier();
571err_notifier6:
572 ocrdma_unregister_inetaddr_notifier();
562 return status; 573 return status;
563} 574}
564 575
@@ -566,6 +577,7 @@ static void __exit ocrdma_exit_module(void)
566{ 577{
567 be_roce_unregister_driver(&ocrdma_drv); 578 be_roce_unregister_driver(&ocrdma_drv);
568 ocrdma_unregister_inet6addr_notifier(); 579 ocrdma_unregister_inet6addr_notifier();
580 ocrdma_unregister_inetaddr_notifier();
569 ocrdma_rem_debugfs(); 581 ocrdma_rem_debugfs();
570} 582}
571 583