diff options
author | Dotan Barak <dotanb@dev.mellanox.co.il> | 2012-07-11 15:39:31 +0000 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2012-07-11 09:22:58 -0700 |
commit | 87d4abda83a125dec65181a6ecce3035db76d46a (patch) | |
tree | 81a69674623e3dd7ad5d7e0aeba3a27b0bad9ce0 /drivers/infiniband | |
parent | f457ce471c522cadf697b873e2cf46e458e90bef (diff) |
IB/cm: Destroy idr as part of the module init error flow
Clean the idr as part of the error flow since it is a resource too.
Signed-off-by: Dotan Barak <dotanb@dev.mellanox.co.il>
Reviewed-by: Sean Hefty <sean.hefty@intel.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/core/cm.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c index c889aaef341..d67999f6e34 100644 --- a/drivers/infiniband/core/cm.c +++ b/drivers/infiniband/core/cm.c @@ -3848,24 +3848,28 @@ static int __init ib_cm_init(void) INIT_LIST_HEAD(&cm.timewait_list); ret = class_register(&cm_class); - if (ret) - return -ENOMEM; + if (ret) { + ret = -ENOMEM; + goto error1; + } cm.wq = create_workqueue("ib_cm"); if (!cm.wq) { ret = -ENOMEM; - goto error1; + goto error2; } ret = ib_register_client(&cm_client); if (ret) - goto error2; + goto error3; return 0; -error2: +error3: destroy_workqueue(cm.wq); -error1: +error2: class_unregister(&cm_class); +error1: + idr_destroy(&cm.local_id_table); return ret; } |