aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorJack Morgenstein <jackm@mellanox.co.il>2006-01-06 16:21:19 -0800
committerRoland Dreier <rolandd@cisco.com>2006-01-06 16:21:19 -0800
commitb4ca1a3f8ca24033d7b7ef595faef97d9f8b2326 (patch)
tree1a45fee6feb7fe3a86a9fc4fbd09fdf32a8f7ae6 /drivers/infiniband
parent4de144bf721e46e7ccc8fed45b20a640cc364904 (diff)
downloadlinux-b4ca1a3f8ca24033d7b7ef595faef97d9f8b2326.tar.gz
IB/uverbs: Fix reference counting on error paths
If an operation fails after incrementing an object's reference count, then it should decrement the reference count on the error path. Signed-off-by: Jack Morgenstein <jackm@mellanox.co.il> Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/core/uverbs_cmd.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
index a57d021d435ae..6985a57fa6ae2 100644
--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -489,6 +489,7 @@ err_idr:
err_unreg:
ib_dereg_mr(mr);
+ atomic_dec(&pd->usecnt);
err_up:
up(&ib_uverbs_idr_mutex);
@@ -935,6 +936,11 @@ err_idr:
err_destroy:
ib_destroy_qp(qp);
+ atomic_dec(&pd->usecnt);
+ atomic_dec(&attr.send_cq->usecnt);
+ atomic_dec(&attr.recv_cq->usecnt);
+ if (attr.srq)
+ atomic_dec(&attr.srq->usecnt);
err_up:
up(&ib_uverbs_idr_mutex);
@@ -1729,6 +1735,7 @@ err_idr:
err_destroy:
ib_destroy_srq(srq);
+ atomic_dec(&pd->usecnt);
err_up:
up(&ib_uverbs_idr_mutex);