From: Roland Dreier Add idr_destroy() calls to the module_exit() functions of the four IB driver modules that use idrs, so we don't leak idr_layer_cache objects when these modules are unloaded. Signed-off-by: Roland Dreier Signed-off-by: Andrew Morton --- drivers/infiniband/core/cm.c | 1 + drivers/infiniband/core/sa_query.c | 1 + drivers/infiniband/core/ucm.c | 1 + drivers/infiniband/core/uverbs_main.c | 7 +++++++ 4 files changed, 10 insertions(+) diff -puN drivers/infiniband/core/cm.c~ib-add-idr_destroy-calls-on-module-unload drivers/infiniband/core/cm.c --- devel/drivers/infiniband/core/cm.c~ib-add-idr_destroy-calls-on-module-unload 2005-10-23 23:00:25.000000000 -0700 +++ devel-akpm/drivers/infiniband/core/cm.c 2005-10-23 23:00:25.000000000 -0700 @@ -3323,6 +3323,7 @@ static void __exit ib_cm_cleanup(void) flush_workqueue(cm.wq); destroy_workqueue(cm.wq); ib_unregister_client(&cm_client); + idr_destroy(&cm.local_id_table); } module_init(ib_cm_init); diff -puN drivers/infiniband/core/sa_query.c~ib-add-idr_destroy-calls-on-module-unload drivers/infiniband/core/sa_query.c --- devel/drivers/infiniband/core/sa_query.c~ib-add-idr_destroy-calls-on-module-unload 2005-10-23 23:00:25.000000000 -0700 +++ devel-akpm/drivers/infiniband/core/sa_query.c 2005-10-23 23:00:25.000000000 -0700 @@ -975,6 +975,7 @@ static int __init ib_sa_init(void) static void __exit ib_sa_cleanup(void) { ib_unregister_client(&sa_client); + idr_destroy(&query_idr); } module_init(ib_sa_init); diff -puN drivers/infiniband/core/ucm.c~ib-add-idr_destroy-calls-on-module-unload drivers/infiniband/core/ucm.c --- devel/drivers/infiniband/core/ucm.c~ib-add-idr_destroy-calls-on-module-unload 2005-10-23 23:00:25.000000000 -0700 +++ devel-akpm/drivers/infiniband/core/ucm.c 2005-10-23 23:00:25.000000000 -0700 @@ -1320,6 +1320,7 @@ static void __exit ib_ucm_cleanup(void) class_destroy(ib_ucm_class); cdev_del(&ib_ucm_cdev); unregister_chrdev_region(IB_UCM_DEV, 1); + idr_destroy(&ctx_id_table); } module_init(ib_ucm_init); diff -puN drivers/infiniband/core/uverbs_main.c~ib-add-idr_destroy-calls-on-module-unload drivers/infiniband/core/uverbs_main.c --- devel/drivers/infiniband/core/uverbs_main.c~ib-add-idr_destroy-calls-on-module-unload 2005-10-23 23:00:25.000000000 -0700 +++ devel-akpm/drivers/infiniband/core/uverbs_main.c 2005-10-23 23:00:25.000000000 -0700 @@ -762,6 +762,13 @@ static void __exit ib_uverbs_cleanup(voi unregister_filesystem(&uverbs_event_fs); class_unregister(&uverbs_class); unregister_chrdev_region(IB_UVERBS_BASE_DEV, IB_UVERBS_MAX_DEVICES); + idr_destroy(&ib_uverbs_pd_idr); + idr_destroy(&ib_uverbs_mr_idr); + idr_destroy(&ib_uverbs_mw_idr); + idr_destroy(&ib_uverbs_ah_idr); + idr_destroy(&ib_uverbs_cq_idr); + idr_destroy(&ib_uverbs_qp_idr); + idr_destroy(&ib_uverbs_srq_idr); } module_init(ib_uverbs_init); _